vent.Show ()
не блокирует выполнение потока, поэтому, не дожидаясь ответа, он просто переходит к следующей строке. Вы можете изменить его следующим образом:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
// Click event of the accept button
//string tituloHabilidad = Convert.ToString(tituloBox.Text);
//string grupoHabilidad = Convert.ToString(claseBox.Text);
//int nivelHabilidad = Convert.ToInt32(nivelBox.Text);
//this.tituloHabilidad = tituloHabilidad; // basically setting this.x = x; does nothing
//this.grupoHabilidad = grupoHabilidad;
//this.nivelHabilidad = nivelHabilidad;
//tituloBox.Text = "";
//claseBox.Text = "";
//nivelBox.Text = "";
//menu.crearBoton(tituloHabilidad, grupoHabilidad, nivelHabilidad, nuestroIcono);
this.DialogResult = true;
}
private void bHabilidades_Copy_Click(object sender, RoutedEventArgs e)
{
//vent is the calling of the entering data window
// Here is something you need to decide :
// 1. You create new vent dialog and show it, e.g.
// var vent = new YourWindowName(); // I recommend personally
// or 2. set dialogresult to null, but dialog will have prefilled data from before (if dialog was used previously)
// vent.DialogResult=null;
if(vent.ShowDialog() == true)
{
//The retorno methods are simply the getters for the parameters of the button
ImageBrush nuestroIcono = vent.retornoIcono();
string tituloHabilidad = vent.retornoTitulo();
string grupoHabilidad = vent.retornoGrupo();
int nivelHabilidad = vent.retornoNivel();
//This method below is the method that creates buttons. The parameters are the data introduced in the entering data button
crearBoton(tituloHabilidad, grupoHabilidad, nivelHabilidad, nuestroIcono);
}
}
//The crearBoton method adds it to the stackPanel
По сути, он будет ждать, пока результат диалога станет истинным, и только после этого переходить к созданию кнопки. Если, например, у вас есть кнопка отмены при вводе информационного окна
private void Button_Cancel_Click(object sender, RoutedEventArgs e)
{
// Click event of the cancel button
this.DialogResult=false;
}
, тогда диалоговое окно закроется, но кнопка не будет создана.
Изменить: после некоторых вопросов, которые вы подняли, я знаю, где актуальная проблема. Методы retornoIcono()
, retornoTitulo()
и retornoNivel()
, скорее всего, просто возвращают tituloBox.Text
, claseBox.Text
и nivelBox.Text
. Поскольку вы устанавливаете их значения в локальных переменных и после этого очищаете textbox.text, он всегда давал вам значение empty.string (или ''). Чтобы исправить это, есть несколько способов:
- закомментировать строки, очищающие текстовые поля (как я сделал выше, но это плохая практика, даже если она работает);
- создайте частные переменные в классе окна / формы и соответствующим образом настройте методы (или, если хотите, просто установите для них publi c и полностью избавьтесь от методов), например
Пример варианта 2: частные переменные / publi c методы
public class YouWindowName
{
private string tituloHabilida, grupoHabilidad;
private int nivelHabilidad;
private void Button_Click_1(object sender, RoutedEventArgs e)
{
<...snip...>
tituloHabilidad = Convert.ToString(tituloBox.Text);
grupoHabilidad = Convert.ToString(claseBox.Text);
nivelHabilidad = Convert.ToInt32(nivelBox.Text);
<...snip...>
}
public string retornoTitulo()
{
return tituloHabilidad;
}
// do other analogically