#c# #visual-studio
#c# #visual-studio
Вопрос:
Я новичок, и я хотел бы знать, есть ли какой-либо способ уменьшить избыточность в следующем коде:
if(checkBoxA.Checked == true)
{
comboBoxA.Enabled = true;
textBoxA.Enabled = true;
}
string stringA = comboBoxA.Text;
float floatA = float.parse(textBoxA.Text);
if(checkBoxB.Checked == true)
{
comboBoxB.Enabled = true;
textBoxB.Enabled = true;
}
string stringB = comboBoxB.Text;
float floatB = float.parse(textBoxB.Text);
Любая помощь была бы оценена. Спасибо!
Комментарии:
1. Вы можете извлечь метод с подписью, например (строка, с плавающей точкой) Получение информации (флажок checkBox, поле ComboBox ComboBox, текстовое поле TextBox)
Ответ №1:
Ну, вы могли бы сделать это, обернув это в функцию. Хотя для установки значений вам может понадобиться контейнер или кортеж.
Вы можете настроить именование на значимые имена.
Вот пример контейнера:
public class Container
{
public string StringValue {get;set;}
public float FloatValue {get;set;}
}
private Container HandleState(CheckBox checkBox, ComboBox comboBox, TextBox textBox)
{
if(checkBox.Checked == true)
{
comboBox.Enabled = true;
textBox.Enabled = true;
}
return new Container()
{
StringValue = comboBox.Text;
FloatValue = float.parse(textBox.Text);
};
}
И назовите это как:
var resultA = HandleState(checkBoxA, comboBoxA, textBoxA);
var resultB = HandleState(checkBoxB, comboBoxB, textBoxB);
Ответ №2:
Если вы используете Winforms, вы можете группировать элементы управления вместе и выполнять свои операции со всей группой. Вы можете использовать 2 контейнера (панели) и добавить comboBoxA и textBoxA в первый, а comboBoxB и textBoxB во второй. Когда флажок установлен, вы можете использовать приведенный ниже код, чтобы включить все элементы в соответствующем контейнере (я использовал panel в качестве контейнера)
foreach (var item in panel1.Controls)
{
(item as Control).Enabled = true;
}
Ответ №3:
Все состояния разные, и цели разные, поэтому в основном вы не можете избежать.