2009-10-25 103 views
0

在WinForm:
alt text http://i36.tinypic.com/2r26a77.png在WinForm中處理CheckBox控件的最佳做法是什麼?

代碼:

using System; 
using System.Windows.Forms; 

namespace DemoApp 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void checkBox1_CheckedChanged(object sender, EventArgs e) 
     { 
      groupBox2.Enabled = checkBox1.Checked; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      SaveSetings(); 
     } 

     private void SaveSetings() 
     { 
      Properties.Settings.Default.UserName = textBox1.Text; 
      Properties.Settings.Default.pass = textBox2.Text; 
      Properties.Settings.Default.userproxy = checkBox1.Checked; 
      Properties.Settings.Default.proxy = textBox3.Text; 
      Properties.Settings.Default.proxy_port = textBox4.Text; 
      Properties.Settings.Default.Save(); 
     } 

     //private void Form1_Load(object sender, EventArgs e) 
     //{ 
     // checkBox1.Refresh(); 
     // groupBox2.Enabled = checkBox1.Checked; 
     //} 
    } 
} 

爲u可以在代碼中我有「使用代理服務器」複選框選擇應使groupbox1反之亦然時,這是看到的。問題是當表單從「user.config」加載設置時,即使未選中檢查控件組1被啓用。處理這種情況的一種方法是檢查在窗體加載事件即

groupBox2.Enabled = checkBox1.Checked; 

控制是否有任何其他要做到這一點,讓我的應用程序更DINAMIC? 我問這個問題的原因是因爲可能會出現多個控件位於同一個表單上的情況,我認爲這會變得令人困惑。

回答

2

我平時喜歡做兩兩件事不同的相比,你的代碼示例:

  • 而不是創建控件之間的耦合依賴,創建一個描述的狀態,而不是
  • 收集代碼的值改變UI狀態的控件(如VisibleEnabled)合併成一個方法,並在需要時調用該方法。

實施例:

private bool _useProxy; 
private bool UseProxy 
{ 
    get 
    { 
     return _useProxy; 
    } 
    set 
    { 
     bool valueChanged = _useProxy != value; 
     _useProxy = value; 
     if (valueChanged) 
     { 
      SetControlStates(); 
     } 
    } 
} 

private void SetControlStates() 
{ 
    groupBox2.Enabled = this.UseProxy; 
    checkBox1.Checked = this.UseProxy; 
} 

private void checkBox1_CheckedChanged(object sender, EventArgs 
    this.UseProxy = checkBox1.Checked; 
} 

然後,在,從配置文件中讀出時,則簡單地用從該文件的值分配this.UseProxy。通過這種方式,不同的控制方式不會以相同的方式相互依賴,而是依賴於它們與之相關的狀態。

+0

你的代碼可以通過的方式來優化一點點...... 設置 { 如果(_useProxy =價值!) { _useProxy =值; SetControlStates(); } } 是UseProxy的setter所需的全部:) – mike 2009-10-25 12:23:58

0

in Form.Loaded handler set groupBox2.Enabled = Properties.Settings.Default.userproxy;

相關問題