【发布时间】:2018-11-06 01:10:34
【问题描述】:
这就是我想要做的。我有一个带有多个复选框的表单。用户将选中其中的 1 个或 2 个或 12 个,然后单击一个按钮,然后会发生几件事,具体取决于选中的复选框。
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (checkBox1.Checked == true)
{
checkBox1.Tag = "IP";
Console.WriteLine(checkBox1.Tag);
}
else
{
checkBox1.Tag = null;
}
}
private void CheckBox2_CheckedChanged(object sender, EventArgs e)
{
if (checkBox2.Checked == true)
{
checkBox2.Tag = "PR";
Console.WriteLine(checkBox2.Tag);
}
else
{
checkBox2.Tag = null;
}
}
所以这只是我在此表单上的 24 个复选框中的 2 个的代码示例。一旦用户单击按钮,表单将使用 checkboxX.Tag 变量保存文件:
private void button2_Click(object sender, EventArgs e)
{
if (string.IsNullOrWhiteSpace(myFile) &
string.IsNullOrWhiteSpace(selectDate) &
string.IsNullOrWhiteSpace(selectDept))
{
MessageBox.Show("Well, that didn't work. Check your info and try again!");
return;
}
else File.Exists(myFile);
{
MessageBox.Show("Document(s) added! " + selectDept + selectWorker +
" for " + dateTime.Year + "-" + dateTime.Month + "-" + dateTime.Day);
MessageBox.Show("To add more docs, re-open this program");
if (checkBox1.Checked)
{
string finalName = @"C:\testing\" + selectDept + selectWorker + @"\" +
checkBox1.Tag + dateTime.Year + dateTime.Month + dateTime.Day + ".pdf";
textBox2.Text = finalName;
File.Copy(myFile, finalName, true);
}
if (checkBox2.Checked)
{
string finalName = @"C:\testing\" + selectDept + selectWorker + @"\" +
checkBox2.Tag + dateTime.Year + dateTime.Month + dateTime.Day + ".pdf";
textBox2.Text = finalName;
File.Copy(myFile, finalName, true);
}
因此,就目前而言,它适用于第一个且仅适用于第一个复选框。就像,文件将按照预期的方式复制和保存,但不是有 5 个相同的文件名为“IP20181012”、“PR20181012”、“FS20181012”等,我最终得到一个名为“IP20181012”的文件,然后另一个文件刚刚命名为“20181012”,这让我相信 checkBox2.Tag 变量从未设置过。我试过使用一个单独的变量(除了内置的 checkBox1.Tag 之一),并且发生了完全相同的问题。似乎只有 checkBox1.Tag 会正确设置,而其他 checkBoxX.Tag 变量都保持为空。即使我声明了单独的变量,然后尝试在复选框中设置它们,无论我做什么,都只会设置 checkBox1 的变量。
另外,这是使用 if 语句的好方法吗?我不需要它们嵌套。我可以把它们排成一行,这样点击按钮就会遍历它下面的所有 if 语句吗?
【问题讨论】:
-
console.writeline(checkBox2.Tag) 是否向控制台输出任何内容?
-
不,它没有。但是 checkBox1.Tag 可以。就是这么奇怪。
-
CheckBox2 事件是否已连接?调试代码时会发生什么?
-
为什么要在选中的事件中设置
.Tag?还有其他东西可以将.Tag设置为其他东西吗?为什么它不仅仅是一个编译时常量? -
是否需要根据用户点击复选框来动态设置Tag属性?换句话说,您是否可以在表单设计器中为每个复选框设置标签(例如,CheckBox1 具有标签属性“IP”,CheckBox2 具有标签属性“RP”等...)。除非 Tag 对于表单上的其他功能需要为空?
标签: c# if-statement