2011-10-25 112 views
1

如何獲取checkbox_CheckChanged事件返回的值?它是一個winforms應用程序,窗體和複選框都是以編程方式創建的。感謝所有幫助。從checkbox_CheckChanged返回一個值

+0

您的代碼在哪裏?你能提供嗎? –

回答

4

Controls事件處理程序總是「無效」,並且您不能更改return type。相反,您可以使用外部變量,並且只有在發生CheckedChanged事件時才更改該值。

public bool checkedthecheckbox { get; set; } 

CheckBox testchbox = new CheckBox(); 

private void Form1_Load(object sender, EventArgs e) 
{ 
    testchbox.CheckedChanged += new EventHandler(testchbox_CheckedChanged); 
} 

void testchbox_CheckedChanged(object sender, EventArgs e) 
{ 
    if (testchbox.Checked) 
     checkedthecheckbox = true; 
    else 
     checkedthecheckbox = false; 
} 
+1

+1實際回答Q. – Otiel

+0

感謝所有回答的人,並特別回答skk的特定答案。 – user995689

1

您可以通過從事件參數鑄造發送對象獲得複選框的狀態:

public void Method1() 
{ 
    CheckBox checkBox = new CheckBox(); 
    checkBox.CheckedChanged += new EventHandler(checkBox_CheckedChanged); 
} 

void checkBox_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox c = (CheckBox)sender; 
    bool resutlt = c.Checked; 
} 

希望這有助於!

1

您可以從'發件人'對象獲取值。

CheckBox chk = (CheckBox) sender; 
bool result = chk.Checked; 
0

我有一個替代方案來改變定期檢查箱變事件進入,爲您提供直接的改變Checked值的事件。

你可以,例如,使用這種方式:

var myForm = new MyForm(); 
myForm.CheckBoxChanged += v => 
{ 
    Console.WriteLine("The value of the checkbox changed to {0}", v); 
}; 

這裏的類定義:

public class MyForm 
{ 
    public event Action<bool> CheckBoxChanged; 
    private CheckBox testchbox = new CheckBox(); 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     testchbox.CheckedChanged += (s, e) => 
     { 
      var cbc = this.CheckBoxChanged; 
      if (cbc != null) 
      { 
       cbc(testchbox.Checked); 
      } 
     }; 
    } 
} 

我希望這有助於。

1

您可以使用內置於C#中的CheckState.CheckedCheckState.Unchecked。例如:

for (int i = 0; i < lsbx_layers.Items.Count; i++) { 
    if (lsbx_layers.GetItemCheckState(i) == CheckState.Checked) { 
     //set boolean variable to true 
    } else if (lsbx_layers.GetItemCheckState(i) == CheckState.Unchecked) { 
     //set boolean variable to false 
    } 
}