我有一个类似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"));
答案 0 :(得分:1)
有两种方法可以解决此问题。
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
中,将第{63行中的m_xTitleBar
从专用更改为受保护:
protected XTitleBar m_xTitleBar = new XTitleBar();
并在第935行上将PointInRect
函数从private更改为protected:
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);
}