Есть два возможных способа исправить это.
1) Если вы посмотрите на источник для XCoolForm, в XCoolForm.cs
в обработчике событий OnMouseDown
. Есть два места, где он проверяет, была ли нажатая кнопка кнопкой закрытия (строка 312 и строка 353). Если была нажата кнопка закрытия, она выходит из приложения.
else if (xbtn.XButtonType == XTitleBarButton.XTitleBarButtonType.Close)
{
Application.Exit();
}
Вы хотите изменить Application.Exit()
на Close()
.
else if (xbtn.XButtonType == XTitleBarButton.XTitleBarButtonType.Close)
{
Close();
}
2) Другой вариант - переопределить событие OnMouseDown. Но вам нужно сделать m_xTitleBar
и PointInRect
защищенными, чтобы вы могли получить к ним доступ. В XCoolForm.cs
измените m_xTitleBar
с частного на защищенный в строке 63:
protected XTitleBar m_xTitleBar = new XTitleBar();
И изменить функцию PointInRect
с частной на защищенную в строке 935:
protected bool PointInRect(Point p, Rectangle rc)
Затем в вашей форме вы можете переопределить событие мыши, как это:
protected override void OnMouseDown(System.Windows.Forms.MouseEventArgs e)
{
foreach (XTitleBarButton xbtn in m_xTitleBar.TitleBarButtons)
{
if (PointInRect(
e.Location,
new Rectangle(
xbtn.XButtonLeft,
xbtn.XButtonTop,
xbtn.XButtonWidth,
xbtn.XButtonHeight
)))
{
// We just want to check if it was the close button that was clicked, if so then we close this form.
if (xbtn.XButtonType == XTitleBarButton.XTitleBarButtonType.Close)
{
Close();
return;
}
}
}
// It wasn't the close button that was clicked, so run the base handler and let it take care of the button click.
base.OnMouseDown(e);
}