Возникла необходимость создавать окно для ввода названия файла который позже будет создан. Создать окно несложно, но как от этого окна вернуть данные я не могу придумать. Есть ли способ определить произошло ли событие Click()
? Или подскажите более грамотные или разумные способы. Буду рад даже направлению в котором искать.
Код создаваемого окна:
class InputBox : Window
{
//private static InputBoxDialog;
private static TextBox textBox;
private static Button button;
private static Label label;
private static Window NewWindow;
private static Window CurrentWindow;
private static string TextVar;
public InputBox()
{
}
public InputBox(ref Window textVar)
{
}
public void Show(string labelContent)
{
CreateBox(labelContent);
}
public void Show(string labelContent, string titleContent)
{
CreateBox(labelContent, titleContent);
}
public void Show(string labelContent, string titleContent, string buttonContent)
{
CreateBox(labelContent, titleContent, buttonContent);
}
private void CreateBox(string labelContent, string titleContent = "Input Box", string buttonContent = "Enter")
{
NewWindow = new Window();
NewWindow.Name = "NewWindow";
NewWindow.Title = titleContent;
NewWindow.Width = 300;
NewWindow.Height = 200;
var stackPanel = new StackPanel { Orientation = Orientation.Vertical };
label = new Label { Content = labelContent, Name = "NewWindowLabel" };
textBox = new TextBox { Text = "", Name = "NewWindowTextBox" };
button = new Button { Content = buttonContent, Name = "NewWindowButton" };
button.Click += NewWindowButton_Click;
stackPanel.Children.Add(label);
stackPanel.Children.Add(textBox);
stackPanel.Children.Add(button);
NewWindow.Content = stackPanel;
NewWindow.Show();
}
private void NewWindowButton_Click(object sender, RoutedEventArgs e)
{
TextVar = textBox.Text;
NewWindow.Close();
}
}
Вызов этого окна:
public void GetFileName()
{
var InputBoxMsg = "Enter you file name";
InputBox inputBox = new InputBox();
inputBox.Show(InputBoxMsg);
}
Судя по описанию вопроса вам нужно диалоговое окно, следовательно вам нужно его отображать как диалог
NewWindow.Content = stackPanel;
NewWindow.ShowDialog();
А дальше вы уже сохраняете информацию в приватное поле TextVar
.
private static string TextVar;
значит остается только изменить его на публичное свойство, которое и будет отвечать за возвращение результата или если все сделать в одном методе.
Я немного изменил ваш код - убрал избыточные методы Show
- при наличии параметров по умолчанию при вызове можно указывать только обязательные параметры а также все или часть из тех, для которых определены стандартные значения. Кроме этого убрал конструкторы, так как в данном случае они не нужны.
public class InputBox
{
public static string Show(string labelContent, string titleContent = "Input Box", string buttonContent = "Enter")
{
var NewWindow = new Window();
NewWindow.Name = "NewWindow";
NewWindow.Title = titleContent;
NewWindow.Width = 300;
NewWindow.Height = 200;
var textVar = "";
var stackPanel = new StackPanel { Orientation = Orientation.Vertical };
var label = new Label { Content = labelContent, Name = "NewWindowLabel" };
var textBox = new TextBox { Text = "", Name = "NewWindowTextBox" };
var button = new Button { Content = buttonContent, Name = "NewWindowButton" };
button.Click += (s, e) => {
textVar = textBox.Text;
NewWindow.Close();
}
stackPanel.Children.Add(label);
stackPanel.Children.Add(textBox);
stackPanel.Children.Add(button);
NewWindow.Content = stackPanel;
NewWindow.ShowDialog();
return textVar;
}
}
и тогда вызов будет следующим
public string GetFileName()
{
var InputBoxMsg = "Enter you file name";
return InputBox.Show(InputBoxMsg);
}
Но это по-прежнему WinForms подходят, WPF способ - определить специальную VM, в которой хранилась бы информация о указанном файле.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Создаю приложение WinFormsВ главном классе Form1 имею объект MemoryCache cache
всем привет! ситуация следующая - мне нужно каждый час запускать exe-файл или скрипт mainjs в виндовс 7,8,10
Используя phantomjs получаю страничкуКак сделать клик по элементу