2009-09-11 10 views
2

Эта функция вызывается из form_onload. Я в основном читаю реестр, определяя, какие флажки отмечены галочкой, а затем отражают это в графическом интерфейсе.C# checkboxes - Могу ли я это очистить?

Есть ли способ сконденсировать это и написать лучший код? Как насчет использования свойства CheckState?

Спасибо.

Вуди

private void checkExcelSettings() 
    { 
     // Read what the values are for the checkboxes first and assign them to a string. 
     string _excelEnable = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelEnableHash", "Unchecked")); 
     string _excelSSN = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelSSNHash", "Unchecked")); 
     string _excelCC = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelCCHash", "Unchecked")); 
     string _excelWells = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelWellsHash", "Unchecked")); 
     string [email protected]"t\""; //unimportant no-op to placate stackoverflow syntax highlighter. 


     // Now let's make sure we reflect what they are supposed to be in the GUI. 
     if (_excelEnable == "Checked") 
     { 
      chkbxExcelEnable.Checked = true; 
     } 
     else 
     { 
      chkbxExcelEnable.Checked = false; 
     } 

     if (_excelSSN == "Checked") 
     { 
      chkbxExcelSSN.Checked = true; 
     } 
     else 
     { 
      chkbxExcelSSN.Checked = false; 
     } 

     if (_excelCC == "Checked") 
     { 
      chkbxExcelCC.Checked = true; 
     } 
     else 
     { 
      chkbxExcelCC.Checked = false; 
     } 

     if (_excelWells == "Checked") 
     { 
      chkbxExcelWellsFargo.Checked = true; 
     } 
     else 
     { 
      chkbxExcelWellsFargo.Checked = false; 
     } 
    } 

ответ

11

Ну, вы могли бы по крайней мере, сократить его до:

chkbxExcelCC.Checked = _excelCC.Equals("Checked"); 

Таким образом, вы избежать все если/другого заявления.

+0

Мне нравятся все эти ответы ... спасибо всем. – Woody

8

Вы можете удалить все ненужные условия if/else, поставив условие inline с назначением. Вы также можете сделать основной путь ключа постоянным. Однако, чтобы действительно упростить его, вы можете взять неоднократное логику отрываясь ключ и сравнения с «Проверено» и поместить его в отдельный метод:

private void checkExcelSettings() 
{ 
    // Now let's make sure we reflect what they are supposed to be in the GUI. 
    chkbxExcelEnable.Checked = IsChecked("ExcelEnableHash"); 
    chkbxExcelSSN.Checked = IsChecked("ExcelSSNHash"); 
    chkbxExcelCC.Checked = IsChecked("ExcelCCHash"); 
    chkbxExcelWellsFargo.Checked = IsChecked("ExcelWellsHash"); 
} 

private static bool IsChecked(string regValue) 
{ 
    return Convert.ToString(
       Registry.GetValue(
        @"HKEY_CURRENT_USER\Software\Mask Data\", 
        regValue, 
        "Unchecked")) == "Checked"; 
} 
3
private void checkExcelSettings() 
{ 
    // Read what the values are for the checkboxes first and assign them to a string. 
    string _excelEnable = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelEnableHash", "Unchecked")); 
    string _excelSSN = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelSSNHash", "Unchecked")); 
    string _excelCC = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelCCHash", "Unchecked")); 
    string _excelWells = Convert.ToString(Registry.GetValue(@"HKEY_CURRENT_USER\Software\Mask Data\", "ExcelWellsHash", "Unchecked")); 

    // Now let's make sure we reflect what they are supposed to be in the GUI. 
    chkbxExcelEnable.Checked = (_excelEnable == "Checked"); 
    chkbxExcelSSN.Checked = (_excelSSN == "Checked"); 
    chkbxExcelCC.Checked = (_excelCC == "Checked"); 
    chkbxExcelWellsFargo.Checked = (_excelWells == "Checked"); 
} 
-3

Используйте короткие руки нотации для если еще

chkbxExcelEnable.Checked = _excelEnable == "Checked" ? true: false; 
+1

hah! _excelEnable == «Проверено» Истина или ложь –

+0

Добавьте флажок на вашей странице .aspx. Добавить следующий код при загрузке int i = 9; CheckBox1.Checked = i == 9? true: false; И проверьте. – Nirlep

+0

Нейл: результат (_excelEnable == «Проверено») является истинным или ложным, поэтому зачем же на нем делать условие? То же самое касается вашего примера (i == 9). –

0

Вы можете поместить все ваши флажки на панели, и установите свойство Tag каждого флажок, соответствующий ключ в реестре. Тогда вы могли бы использовать этот код в событии Load формы в:

foreach (CheckBox cb in panel1.Controls) 
{ 
    cb.Checked = ((string)Registry.GetValue(RegPath, 
     (string)cb.Tag, "Unchecked") == "Checked"); 
} 

Это имеет тот недостаток, что не сразу очевидно для будущего обслуживания программиста, поэтому я хотел бы добавить подробный комментарий здесь направлен на вашу возможную замене.

Вы также можете отказаться от тега и просто называть каждый CheckBox любым соответствующим ключом, а затем использовать «cb.Name» вместо «(string) cb.Tag». Во всяком случае, никто не любит венгерскую нотацию.

0
private void checkExcelSettings() 
    { 
     string key = @"HKEY_CURRENT_USER\Software\Mask Data\"; 

     // Read what the values are for the checkboxes first and assign them to a string. 
     string _excelEnable = Convert.ToString(Registry.GetValue(key, "ExcelEnableHash", "Unchecked")); 
     string _excelSSN = Convert.ToString(Registry.GetValue(key, "ExcelSSNHash", "Unchecked")); 
     string _excelCC = Convert.ToString(Registry.GetValue(key, "ExcelCCHash", "Unchecked")); 
     string _excelWells = Convert.ToString(Registry.GetValue(key, "ExcelWellsHash", "Unchecked")); 
     string [email protected]"t\""; //unimportant no-op to placate stackoverflow syntax highlighter. 

     // Now let's make sure we reflect what they are supposed to be in the GUI. 
     chkbxExcelEnable.Checked = (_excelEnable == "Checked"); 
     chkbxExcelSSN.Checked = (_excelSSN == "Checked"); 
     chkbxExcelCC.Checked = (_excelCC == "Checked"); 
     chkbxExcelWellsFargo.Checked = (_excelWells == "Checked"); 
    } 
Смежные вопросы