2013-08-07 2 views
2

Для моей программы winforms у меня есть диалоговое окно «Параметры», и когда оно закрывается, я просматриваю все имена элементов управления диалогового окна (текстовые поля, флажки и т. Д.) И их значения и хранить их в базе данных, чтобы я мог прочитать ее в моей программе. Как вы можете видеть ниже, я могу легко получить доступ к свойству Text из группы Control, но нет права доступа к значению Checked текстового поля. Нужно ли мне конвертировать c, в этом случае, в первую очередь?Получите checkbox.checked значение программно от циклирования через элементы управления winform

conn.Open(); 
foreach (Control c in grp_InvOther.Controls) 
{ 
    string query = "INSERT INTO tbl_AppOptions (CONTROLNAME, VALUE) VALUES (@control, @value)"; 
    command = new SQLiteCommand(query, conn); 
    command.Parameters.Add(new SQLiteParameter("control",c.Name.ToString())); 
    string controlVal = ""; 
    if (c.GetType() == typeof(TextBox)) 
     controlVal = c.Text; 
    else if (c.GetType() == typeof(CheckBox)) 
     controlVal = c.Checked; ***no such property exists!!*** 

    command.Parameters.Add(new SQLiteParameter("value", controlVal)); 
    command.ExecuteNonQuery(); 
} 
conn.Close(); 

Если мне нужно преобразовать c первых, как я могу идти о том, что делать?

+0

Да, вам нужно преобразовать. –

ответ

1

Да, вы должны преобразовать его:

else if (c.GetType() == typeof(CheckBox)) 
    controlVal = ((CheckBox)c).Checked.ToString(); 

И вы можете сделать чек проще читать:

else if (c is CheckBox) 
    controlVal = ((CheckBox)c).Checked.ToString(); 
+0

Хороший ответ, и спасибо за отзыв по сокращению моего кода. :) – gnarlybracket

-1

Вы можете заливаются:

controlVal = (CheckBox)c.Checked; 

КСТАТИ: controlVal не нужно быть строка, логическое значение будет выполнять работу и сохранить память.

+0

Это не сработает. Вы по-прежнему пытаетесь преобразовать свойство ('Checked'), а не Control (' c'). –

+0

Собственно, 'controlVal' действительно должен быть строкой, потому что я также сохраняю свойство Text для текстовых полей. – gnarlybracket

+0

@Mario: Неправильно. 'c' - объект Control. Вы можете применить его прямо к объекту CheckBox, а затем напрямую получить доступ к его свойствам. – Robert

-1

попробовать это:

controlVal = Convert.ToString(c.Checked); 
+0

Это не сработает, вам нужно бросить первыми. – Robert

0

ответ Робера хорошо но позвольте мне дать вам лучший вариант

TextBox currTB = c as TextBox; 
if (currTB != null) 
    controlVal = c.Text; 
else 
{ 
    CheckBox currCB = c as CheckBox; 
    if (currCB != null) 
    controlVal = currCB.Checked; 
} 
Смежные вопросы