Подскажите, пожалуйста, как лучше сделать. Ситуация следующая: Допустим, имеется две кнопки на двух разных вкладках (TabControl) предназначенных для открытия xml-файла. Логика первой кнопки:
private void btnOpenConfigConvert_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
txtPathConfigConvert.Text = ofd.FileName;
}
}
Логика второй кнопки:
private void btnOpenConfigImport_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
txtPathConfigImport.Text = ofd.FileName;
}
}
Как видно из примеров, отличается лишь TextBox, куда будет записываться путь. И таких методов достаточно много для других контролов, т.к. интерфейсы на обеих вкладках во многом похожи и логика тоже во многом совпадает.
Какая практика применяется в подобных случаях?
Вынести логику в отдельный метод, например в статическом классе
public static class Dialogs
{
public string GetConfigFileName()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
return ofd.FileName;
return null;
}
}
и пример вызова:
var path = Dialogs.GetConfigFileName();
if(!string.IsNullOrWhiteSpace(path))
txtPathConfigImport.Text = path;
Передавать в метод GetConfigFileName
элемент управления крайне не рекомендую, так как это накладывает сильное ограничение на его использование.
Если у вас много похожих частей на вкладках, то возможно есть смысл подумать об определении UserControl
.
Грязный способ - записать название textBox для которого нужно установить текст в качестве Tag для Button и уже извлекать эту информацию в обработчике события, который будет один для всех кнопок этого типа.
private bool GetConfigFileName(out string aFileName)
{
aFileName = "";
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
aFileName = ofd.FileName;
return true;
}
return false;
}
private void btnOpenConfigImport_Click(object sender, EventArgs e)
{
string fileName;
if (GetConfigFileName(out fileName))
{
txtPathConfigImport.Text = fileName;
}
}
или
private bool GetConfigFileName(TextBox aTarget)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "xml files (*.xml)|*.xml|All files (*.*)|*.*";
if (ofd.ShowDialog() == DialogResult.OK)
{
aTarget.Text = ofd.FileName;
return true;
}
return false;
}
private void btnOpenConfigImport_Click(object sender, EventArgs e)
{
if (GetConfigFileName(txtPathConfigImport))
{
// if needed ...
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Нашел много всяких вопросов на эти темы но не один мне не помогаетВозьмем картинку которую я получаю с помощью vk api https://pp