簡體   English   中英

c#復選框問題

[英]c# checkbox problem

我想最小化我必須為這個小問題編寫的代碼量。 我有1個文本框,與2個復選框有關系,是和否。 表單加載上的文本框設置為禁用。 當yes復選框被更改時,此事件發生 -

private void checkYes1_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = true;
    checkNo1_cbx.Checked = false;
}

當沒有復選框改變時 -

private void checkNo1_cbx_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = false;
    checkYes1_cbx.Checked = false;
}

雖然另一個問題是我必須按兩次才能讓它檢查。

這是針對表單上的問題,到目前為止,它最多可以提出11個問題,並且將來會添加更多問題。 所以到目前為止我的兩個問題是 -

  1. 如何在復選框更改時解決問題我必須再次按下它來檢查它。

  2. 是否可以改進此代碼以最大限度地減少將來必須編寫的代碼量。

你為什么用2個棋盤? 一個復選框( check1 )就足夠了:

private void check1_CheckedChanged(object sender, EventArgs e)
{
    textBox14.Enabled = check1.Checked;
}

編輯:假設每個問題意味着1個文本框,那么每個文本框需要1個復選框...這可以通過使用更復雜的方法進一步改進

private void checkYes1_CheckedChanged(object sender, EventArgs e)
{
    OnCheck(true);
}
private void checkNo1_cbx_CheckedChanged(object sender, EventArgs e)
{
    OnCheck(false);
}

private void OnCheck(bool yes)
{
    textBox14.Enabled = yes;
    checkNo1_cbx.CheckedChanged -= checkNo1_cbx_CheckedChanged;
    checkNo2_cbx.CheckedChanged -= checkYes1_CheckedChanged;
    checkNo1_cbx.Checked = !yes;
    checkNo2_cbx.Checked = yes;
    checkNo1_cbx.CheckedChanged += checkNo1_cbx_CheckedChanged;
    checkNo2_cbx.CheckedChanged += checkYes1_CheckedChanged;
}

但是考慮使用RadioBox而不是CheckBox因為如果要檢查一個,則取消選中另一個..

編輯:在您之前的設計中,您得到錯誤changed I have to press it again to check it因為您有兩個事件處理程序分配給每個復選框。 現在在你的代碼中檢查第一個時,你是禁用文本框並使另一個未選中,但當你調用另一個未選中時Checked = false你也調用了第二個復選框事件處理程序,所以它將啟用文本和make第一個禁用...你應該刪除事件處理程序-=當你的代碼更新時,如果你不想再次觸發處理程序處理程序..那我在提供的代碼示例中做了什么。

我同意Yahia。 如果您確實需要顯式提供這兩個選項,那么您應該考慮使用RadioButtons。

除非你有一個往返於服務器的往返行程以禁用復選框選擇更改的文本框的原因,為什么不通過javascript在客戶端進行全部操作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM