Как остановить закрытие всего приложения при закрытии формы окна xcool - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть проект, подобный CMS, я работаю над ним, и я добавил тему xcool.

Здесь имеется 50 оконных форм, но теперь проблема заключается в том, что при закрытии одной оконной формы закрывается все приложение.

Когда я удаляю эту тему, она работает хорошо. Я не нашел никакого метода закрытия темы и т. Д.

Что я пробовал:

using System.IO;

namespace CampusManagement
{
    public partial class Student_Reg : XCoolForm.XCoolForm

    private XmlThemeLoader xtl = new XmlThemeLoader();


    this.TitleBar.TitleBarBackImage = CampusManagement.Properties.Resources.predator_256x256;
    this.MenuIcon = CampusManagement.Properties.Resources.alien_vs_predator_3_48x48.GetThumbnailImage(24, 24, null, IntPtr.Zero);
    xtl.ThemeForm = this;
    this.Border.BorderStyle = XCoolForm.X3DBorderPrimitive.XBorderStyle.Flat;
    this.TitleBar.TitleBarBackImage = CampusManagement.Properties.Resources.Mammooth_1;
    this.TitleBar.TitleBarCaption = "Campus Management System";
    xtl.ApplyTheme(Path.Combine(Environment.CurrentDirectory, @"..\..\Themes\BlueWinterTheme.xml"));

1 Ответ

0 голосов
/ 05 сентября 2018

Есть два возможных способа исправить это.

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);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...