gpt4 book ai didi

C# All 复选框外观

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:22 25 4
gpt4 key购买 nike

在我的 WinForms Visual Studio 应用程序中,我使用以下 C# 代码将复选框样式设置为平面按钮:

 private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (TestBox.Checked == true)
{
TestBox.Image = Image.FromFile("M:\\CheckBox_52x.png");
TestBox.ImageAlign = ContentAlignment.MiddleCenter;
TestBox.FlatAppearance.BorderSize = 0;
// make all four (!) BackColors transparent!
TestBox.BackColor = System.Drawing.Color.Transparent;
TestBox.FlatAppearance.CheckedBackColor = Color.Transparent;
TestBox.FlatAppearance.MouseDownBackColor = Color.Transparent;

}
else
{
TestBox.Image = Image.FromFile("M:\\CheckBoxUncheck_52x.png");
TestBox.ImageAlign = ContentAlignment.MiddleCenter;
TestBox.FlatAppearance.BorderSize = 0;
// make all four (!) BackColors transparent!
TestBox.BackColor = System.Drawing.Color.Cyan;
TestBox.FlatAppearance.CheckedBackColor = Color.Cyan;
TestBox.FlatAppearance.MouseDownBackColor = Color.Cyan;
}
}

我想知道,如果不是对我的应用程序中的每个复选框都这样做,我是否可以制作“未检查”版本我已经为这个应用程序编码了默认的复选框样式 - 例如 - 每次我创建一个新的它出现具有这些属性。

请记住,我是 C# 编码的新手。

最佳答案

如果您希望多个控件使用相同的事件处理程序,那很简单——只需使用相同的事件处理程序即可。将您的代码更改为:

private void HandleCheckBoxCheckedChanged(object sender, EventArgs e)
{
CheckBox checkBox = (CheckBox) sender;
string imageFile;
Color color;
if (checkBox.Checked == true)
{
// TODO: Use resources embedded within your app
imageFile = "M:\\CheckBox_52x.png";
color = Color.Transparent;
}
else
{
imageFile = "M:\\CheckBoxUncheck_52x.png";
color = Color.Cyan;
}
// TODO: Load each file once and reuse the bitmap, I suspect.
checkBox.Image = Image.FromFile(imageFile);
checkBox.ImageAlign = ContentAlignment.MiddleCenter;
checkBox.FlatAppearance.BorderSize = 0;
checkBox.BackColor = color;
checkBox.FlatAppearance.CheckedBackColor = color;
checkBox.FlatAppearance.MouseDownBackColor = color;
}

然后您可以将相同的处理程序附加到所有复选框。

如果您有多个类,您可以将其设为公共(public)静态方法。到那时,您可能需要在代码中添加事件处理程序,而不是让设计人员去做——我不知道设计人员是否知道如何为事件处理程序使用静态方法。但它会是这样的:

TestBox.CheckedChanged += CheckBoxUtilities.HandleCheckBoxCheckedChanged;

那是如果您真的只想将相同的代码用于事件处理程序。其他需要考虑的事情是:

  • 按照 rakatherock 的建议构建 CheckBox 的子类。我自己在 Windows 窗体中创建自定义控件的经验并不是很好,但从 OO 的角度来看感觉很好。初始实现可以仅派生自 CheckBox 并隐式添加一个事件处理程序,该处理程序的作用与您当前的代码完全相同。
  • 如果您想在某个时刻找到表单中的所有 CheckBox 控件,您可以使用 Controls 属性,然后递归遍历任何本身就是容器的控件。不过,我现在不会详细介绍,因为听起来您并不真的想要这个 - 除非您这样做只是为了找到所有 CheckBox 控件并将相同的事件处理程序添加到所有这些。

关于C# All 复选框外观,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36171724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com