我的表单上有几个问题,其中包含可接受或不可接受的选项,该选项与单选按钮相关联。我遇到的问题是,当我取消选中时,当我检查并再次触发时,我的检查事件会触发一次,我不确定如何修改我的代码,以便每个问题答案只触发一次,这是正确的方法吗实现我正在做的事情并将答案插入到SQL中,因为除了两次触发的事件之外它是半工作的:
string answer1 = "Acceptable";
string answer2 = "Not Acceptable";
string n1;
string n2;
string n3;
string n4;
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
SqlConnection conDatabase = new SqlConnection(String.Format(@"Data Source={0};Initial Catalog={1};Persist Security Info=True;User ID={2};Password={3}", SQLSERVER_ID, SQLDatabaseName, SQLServerLoginName, SQLServerPassword));
string query = "INSERT INTO Answers(Option1, Option2, Option3, Option4) VALUES (@Option1, @Option2, @Option3, @Option4";
SqlCommand cmd = new SqlCommand(query, conDatabase);
cmd.CommandType = CommandType.Text;
conDatabase.Open();
cmd.Parameters.Add("@Option1", SqlDbType.NVarChar).Value = n1;
cmd.Parameters.Add("@Option2", SqlDbType.NVarChar).Value = n2;
cmd.Parameters.Add("@Option3", SqlDbType.NVarChar).Value = n3;
cmd.Parameters.Add("@Option4", SqlDbType.NVarChar).Value = n4;
cmd.ExecuteNonQuery();
conDatabase.Close();
}
我的xaml代码是:
<RadioButton x:Name="radio1a" GroupName="Question1" Checked="radioButton1_Checked"/>
<RadioButton x:Name="radio1b" GroupName="Question1" Unchecked="radioButton2_Checked"/>
<RadioButton x:Name="radio2a" GroupName="Question2" Checked="radioButton1_Checked"/>
<RadioButton x:Name="radio2b" GroupName="Question2" Unchecked="radioButton2_Checked"/>
最后,我的检查是点击了可接受的单选按钮1然后&#39; n1&#39;将设置为answer1(可接受),如果点击了不可接受的单选按钮2,那么&#39; n1&#39;将设置为answer2(不可接受) - n1为1(我表格上的第一个问题):
private void radioButton1_Checked(object sender, RoutedEventArgs e)
{
Check();
}
private void radioButton2_Checked(object sender, RoutedEventArgs e)
{
Check();
}
public void Check()
{
if (radio1a.IsChecked == true)
{
n1 = answer1;
}
else if (radio1b.IsChecked == true)
{
n1 = answer2;
}
if (radio2a.IsChecked == true)
{
n2 = answer1;
}
else if (radio2b.IsChecked == true)
{
n2 = answer2;
}
.... etc.
}
答案 0 :(得分:1)
好的。
想象一下,你检查你的第一个单选按钮。之后你正在检查第二个。您的函数 check()对于第一个单选按钮仍然是正确的,因为它仍然被检查!
这样:如果选中radioButton1或2,则获取按钮的名称。将此按钮名称传递给check() - 函数并切换它。这样它只会对被检查的无人机开火,而不是对所有被检查的无人机开火。
private void radioButton1_Checked(object sender, RoutedEventArgs e)
{
var radioFired = (RadioButton)sender;
Check(radioFired.Name);
}
private void radioButton2_Checked(object sender, RoutedEventArgs e)
{
var radioFired = (RadioButton)sender;
Check(radioFired.Name);
}
public void Check(string radioName)
{
switch(radioName)
{
case "radio1a":
n1 = answer1;
break;
case "radio1b":
n1 = answer2;
break;
etc...
}
}
作为清洁编码的提示: 无需将返回的布尔值与“true”或“false”进行比较。
而不是这个..
if(radioButton.IsChecked == true)
更好的方式来比较真实..
if(radioButton.IsChecked)
或者像这样比较假..
if(!radioButton.IsChecked)
如果选中,'radioButton.IsChecked'为真。如果值为true,则代码将被执行。它就像写if(true)将被执行一样。
如果您希望继续使用代码:
删除了这部分内容。没工作。最好采取我的解决方案。