C#复选框
我在总共8行的每行中有3个复选框。我只想在前两个复选框未选中时选中每行中的第三个复选框。我不想为每一行编写checkRow()方法 最好的办法是什么C#复选框,c#,C#,我在总共8行的每行中有3个复选框。我只想在前两个复选框未选中时选中每行中的第三个复选框。我不想为每一行编写checkRow()方法 最好的办法是什么 private void checkRow() { for (int i = 0; i < 8; i++) { var arraylist = new[] { checkbox1, checkbox2, checkbox3 }; if (checkbox1.Checked || checkbox
private void checkRow()
{
for (int i = 0; i < 8; i++)
{
var arraylist = new[] { checkbox1, checkbox2, checkbox3 };
if (checkbox1.Checked || checkbox2.Checked)
{
arraylist[2].Checked = false;
}
else
arraylist[2].Checked = true;
}
}
private void checbox1_CheckedChanged(object sender, EventArgs e)
{
checkRow();
}
private void checbox2_CheckedChanged(object sender, EventArgs e)
{
checkRow();
}
private void checbox3_CheckedChanged(object sender, EventArgs e)
{
checkRow();
}
private void checkRow()
{
对于(int i=0;i<8;i++)
{
var arraylist=new[]{checkbox1,checkbox2,checkbox3};
如果(复选框1.Checked | |复选框2.Checked)
{
arraylist[2]。选中=false;
}
其他的
arraylist[2]。选中=true;
}
}
私有void checbox1\u CheckedChanged(对象发送方,事件参数e)
{
checkRow();
}
私有void checbox2\u CheckedChanged(对象发送方,事件参数e)
{
checkRow();
}
私有void checbox3\u CheckedChanged(对象发送方,事件参数e)
{
checkRow();
}
作为回应
private void checkRow()
{
var arraylist = new[] { checkEdit1, checkEdit2, checkEdit3 };
var arraylist1 = new[] { checkEdit4, checkEdit5, checkEdit6 };
var arraylist2 = new[] { checkEdit7, checkEdit8, checkEdit9 };
var array = new[] { arraylist, arraylist1, arraylist2 };
for (int i = 0; i < 8; i++)
{
//if checkedit1 or checkedit2 is checked the checkedit3 should not be checked
if (array[i]....Checked || array[i]....Checked)
{
arraylist[i]...Checked = false;
}
else
arraylist[i]...Checked = true;
}
}
private void checkRow()
{
var arraylist=new[]{checkEdit1,checkEdit2,checkEdit3};
var arraylist1=new[]{checkEdit4,checkEdit5,checkEdit6};
var arraylist2=new[]{checkEdit7,checkEdit8,checkEdit9};
var array=new[]{arraylist,arraylist1,arraylist2};
对于(int i=0;i<8;i++)
{
//如果选中了checkedit1或checkedit2,则不应选中checkedit3
if(数组[i]…已选中| |数组[i]…已选中)
{
arraylist[i]…选中=false;
}
其他的
arraylist[i]…选中=真;
}
}
我正在尝试这样做,这样我就不必为每一行编写checkRow()您应该使用与所有三个委托的处理程序相同的方法
chkbox.CheckedChanged += new EventHandler(chkbox_CheckedChanged);
chkbox2.CheckedChanged += new EventHandler(chkbox_CheckedChanged);
chkbox3.CheckedChanged += new EventHandler(chkbox_CheckedChanged);
private void chkbox_CheckedChanged(object sender, EventArgs e)
{
// do your stuff here
}
对于所有三个委托,应使用与处理程序相同的方法
chkbox.CheckedChanged += new EventHandler(chkbox_CheckedChanged);
chkbox2.CheckedChanged += new EventHandler(chkbox_CheckedChanged);
chkbox3.CheckedChanged += new EventHandler(chkbox_CheckedChanged);
private void chkbox_CheckedChanged(object sender, EventArgs e)
{
// do your stuff here
}
假设您没有使用
DataGridView
或其他方式将它们组织成逻辑行,为什么不执行以下操作:
将复选框存储在一个数组中,以便轻松访问它们
CheckBox[,] checkArray = new CheckBox[8,3]...
将行索引存储在第一个和第二个复选框的标记属性中
checkBox01.Tag = 0;
checkBox02.Tag = 0;
checkBox11.Tag = 1;
checkBox12.Tag = 1;
让所有第一个和第二个复选框指向同一个事件处理程序:
checkBox01.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
checkBox02.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
checkBox11.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
checkBox12.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
在事件处理程序中,您现在确切地知道要更新哪个复选框,并且不再需要循环:
private void aCheckBox_CheckedChanged(object sender, EventArgs e)
{
int rowIndex = (int)((CheckBox)sender).Tag;
checkArray[rowIndex,2].Checked = !(checkArray[rowIndex,0].Checked ||
checkArray[rowIndex,1].Checked);
}
您也可以使用带有复选框名称的字符串查找来实现这一点,但是如果您选择重命名复选框,则查找速度肯定会较慢,并且以后重构时会很痛苦。假设您没有使用DataGridView
或其他方式将其组织到逻辑行中,为什么不执行以下操作:
checkBox01.Tag = 0;
checkBox02.Tag = 0;
checkBox11.Tag = 1;
checkBox12.Tag = 1;
将复选框存储在一个数组中,以便轻松访问它们
CheckBox[,] checkArray = new CheckBox[8,3]...
将行索引存储在第一个和第二个复选框的标记属性中
checkBox01.Tag = 0;
checkBox02.Tag = 0;
checkBox11.Tag = 1;
checkBox12.Tag = 1;
让所有第一个和第二个复选框指向同一个事件处理程序:
checkBox01.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
checkBox02.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
checkBox11.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
checkBox12.CheckedChanged += new EventHandler(aCheckBox_CheckedChanged);
在事件处理程序中,您现在确切地知道要更新哪个复选框,并且不再需要循环:
private void aCheckBox_CheckedChanged(object sender, EventArgs e)
{
int rowIndex = (int)((CheckBox)sender).Tag;
checkArray[rowIndex,2].Checked = !(checkArray[rowIndex,0].Checked ||
checkArray[rowIndex,1].Checked);
}
您也可以使用带有复选框名称的字符串查找来完成此操作,但如果您选择重命名复选框,则肯定会比较慢,而且以后重构会很痛苦。您知道,您的for循环中没有使用i…是的,我想这正是您想要的。您知道,您的for循环中没有使用i…是的,我想这就是你的意思。
checkBox01.Tag = 0;
checkBox02.Tag = 0;
checkBox11.Tag = 1;
checkBox12.Tag = 1;