C# All 复选框外观
C# All Check-box Appearance
在我的 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;
}
}
我想知道,如果不是对我的应用程序中的每个复选框都这样做,我是否可以制作 "UNCHECKED" 版本,我已经为这个应用程序编写了默认复选框样式 - 例如 - 每次我创建一个新的它出现了这些属性。
请记住,我是 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 Forms 中创建自定义控件的经验不是很好,但从 OO 的角度来看感觉很好。初始实现可以仅从 CheckBox
派生并隐式添加一个事件处理程序,该处理程序完全按照您当前的代码执行。
- 如果你想在某个时候找到一个表单中的所有
CheckBox
控件,你可以使用 Controls
属性 然后递归通过任何本身是容器的控件。不过,我现在不会详细介绍,因为听起来您并不真的想要这个 - 除非您这样做只是为了找到所有 CheckBox
控件并向所有控件添加相同的事件处理程序.
从这个问题来看,您尝试做的是从单个复选框操作应用程序中的所有复选框,因此这里的逻辑如下:
在设置中保存所有复选框值(选中或未选中)
创建设置值
Right Click Project>Properties>Settings>Give Name as someBoolValue,type as bool,Scope as User
因此,在此复选框的 CheckChanged 事件中,将值保存在我们刚刚创建的设置变量中 now.In CheckChangedEvent of main All Check box 代码如下:
Properties.Settings.Default.someBoolValue=cbCheckBox.Checked;
Properties.Settings.Default.Save();
现在,在每个表单加载中,只要事件适合,就可以像
foreach(Control c in this.Controls)
{
if(c is CheckBox)
{
c.Checked=Properties.Settings.Default.someBoolValue
}
}
注意:您可以用您的自定义替换我实现的所有复选框controls.I已经给了您一个如何做的想法。
在我的 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;
}
}
我想知道,如果不是对我的应用程序中的每个复选框都这样做,我是否可以制作 "UNCHECKED" 版本,我已经为这个应用程序编写了默认复选框样式 - 例如 - 每次我创建一个新的它出现了这些属性。
请记住,我是 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 Forms 中创建自定义控件的经验不是很好,但从 OO 的角度来看感觉很好。初始实现可以仅从CheckBox
派生并隐式添加一个事件处理程序,该处理程序完全按照您当前的代码执行。 - 如果你想在某个时候找到一个表单中的所有
CheckBox
控件,你可以使用Controls
属性 然后递归通过任何本身是容器的控件。不过,我现在不会详细介绍,因为听起来您并不真的想要这个 - 除非您这样做只是为了找到所有CheckBox
控件并向所有控件添加相同的事件处理程序.
从这个问题来看,您尝试做的是从单个复选框操作应用程序中的所有复选框,因此这里的逻辑如下:
在设置中保存所有复选框值(选中或未选中)
创建设置值
Right Click Project>Properties>Settings>Give Name as someBoolValue,type as bool,Scope as User
因此,在此复选框的 CheckChanged 事件中,将值保存在我们刚刚创建的设置变量中 now.In CheckChangedEvent of main All Check box 代码如下:
Properties.Settings.Default.someBoolValue=cbCheckBox.Checked;
Properties.Settings.Default.Save();
现在,在每个表单加载中,只要事件适合,就可以像
foreach(Control c in this.Controls)
{
if(c is CheckBox)
{
c.Checked=Properties.Settings.Default.someBoolValue
}
}
注意:您可以用您的自定义替换我实现的所有复选框controls.I已经给了您一个如何做的想法。