Si dos ventanas se abre sobre todo A y B, de cómo cerrar la ventana usando un código que escribe en la ventana B.cerrar una ventana de otro en WPF
Respuesta
Su mejor opción sería la creación de una propiedad en la ventana que B pasas la ventana de creación a. Algo como esto. Tengo una ventana llamada MainWindow y una segunda ventana llamada Window2.
ventana principal
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Window2 secondForm;
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
secondForm = new Window2();
secondForm.setCreatingForm =this;
secondForm.Show();
}
}
}
Window2
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for Window2.xaml
/// </summary>
public partial class Window2 : Window
{
Window creatingForm;
public Window2()
{
InitializeComponent();
}
public Window setCreatingForm
{
get { return creatingForm; }
set { creatingForm = value; }
}
private void button1_Click(object sender, RoutedEventArgs e)
{
if (creatingForm != null)
creatingForm.Close();
}
}
}
En respose a su comentario, el cierre de una ventana que se creó por otra forma es tan fácil como llamar a la Cerrar Método de la forma creada:
namespace WpfApplication1
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Window2 secondForm;
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
if (secondForm == null)
{
secondForm = new Window2();
secondForm.Show();
}
else
secondForm.Activate();
}
private void button2_Click(object sender, RoutedEventArgs e)
{
if (secondForm != null)
{
secondForm.Close();
secondForm = new Window2();
//How ever you are passing information to the secondWindow
secondForm.Show();
}
}
}
}
es muy sencillo hacer una clase pública y método como este
class Helper
{
public static void CloseWindow(Window x)
{
Assembly currentAssembly = Assembly.GetExecutingAssembly();
// int count = Application.Current.Windows;
foreach (Window w in Application.Current.Windows)
{
//Form f = Application.OpenForms[i];
if (w.GetType().Assembly == currentAssembly && w==x)
{
w.Close();
}
}
}
}
ahora llamar a esta función desde la que desea cerrar la ventana como esta.
Helper.CloseWindow(win);//win is object of window which you want to close.
Espero que esto ayude.
Aquí hay una manera de cerrar cualquier ventana desde cualquier otra ventana. Puede modificarlo para que funcione con varias instancias al darle a su ventana un identificador único y luego solo buscarlo en el ciclo foreach.
public static class Helper
{
public static void CloseWindowOfWhichThereIsOnlyOne<T>()
{
Assembly currentAssembly = Assembly.GetExecutingAssembly();
foreach (Window w in Application.Current.Windows)
{
if (w.GetType().Assembly == currentAssembly && w is T)
{
w.Close();
break;
}
}
}
}
O con un identificador "fudge" único:
public static void CloseWIndowUsingIdentifier(string windowTag)
{
Assembly currentAssembly = Assembly.GetExecutingAssembly();
foreach (Window w in Application.Current.Windows)
{
if (w.GetType().Assembly == currentAssembly && w.Tag.Equals(windowTag))
{
w.Close();
break;
}
}
}
me gusta esto mejor que la solución propuesta, ya que no tiene que meterse con sus ventanas, que no sea para darles etiquetas únicas . Solo he estado usando esto para proyectos pequeños donde no existe el riesgo de que las cosas no sean únicas, ¡no voy a perder la pista de 10-12 ventanas!
La otra solución propuesta es un poco tonto (no tengo 50 karma para comentar acerca de eso) ya que sólo podría llamar win.close() si ya tenía una referencia al objeto ...
foreach (Window w in Application.Current.Windows)
{
if (w.Name != "Main_Window_wind")
{
w.Visibility = System.Windows.Visibility.Hidden;
}
}
//name is the x:Name="Main_Window_wind" in xaml
puede cerrar ahora como hiden todas las ventanas sin cerrar la llamada Main_Window_wind, puede agregar otra ventana para no cerrar con esto en si:!! w.Name = "Main_Window_wind" & & w.Name = "AnyOther_Window_wind" & & ...
una manera más rápida es esto:
for (int intCounter = App.Current.Windows.Count - 1; intCounter > -1; intCounter--)
{
if (App.Current.Windows[intCounter].Name != "Main_Window_wind")
App.Current.Windows[intCounter].Visibility = System.Windows.Visibility.Hidden;
}
Agregue algunos comentarios sobre su solución sobre por qué y cómo resuelve el problema –
- 1. Abrir ventana wpf desde otro proyecto
- 2. cómo cerrar la página de WPF como ventana
- 3. Cómo cerrar una ventana de WPF en una clave de escape
- 4. Tener una ventana wpf dentro de otra ventana wpf
- 5. ¿Cómo cerrar una ventana emergente de Liferay.util.openWindow?
- 6. Cómo cerrar una ventana abierta de eclipse
- 7. ¿Minimiza una ventana en WPF?
- 8. WPF (MVVM): ¿Cerrar una vista desde Viewmodel?
- 9. Cerrar programáticamente ventana gtk
- 10. Capturar ventana cerrar evento
- 11. JavaFX 2.0: Cerrar una etapa (ventana)
- 12. ¿Cómo crear una ventana personalizada de cromo en wpf?
- 13. Cómo cerrar una ventana usando jQuery
- 14. Botón HTML Cerrar ventana
- 15. cómo cerrar una ventana de diálogo de WPF cuando el usuario hace clic fuera de ella
- 16. diseño de WPF en una ventana
- 17. Cerrar infowindow cuando se hace clic en otro marcador
- 18. ¿Cómo cerrar la ventana en awt?
- 19. ¿Cómo cerrar una aplicación JavaFX en la ventana cerrada?
- 20. Precarga de ventana WPF
- 21. Función para cerrar la ventana en Tkinter
- 22. Cómo rotar una ventana de WPF?
- 23. ¿Cómo implemento una ventana sin bordes con WPF?
- 24. Cómo cerrar otro proceso de C#
- 25. Cargando una ventana de WPF sin mostrarlo
- 26. RaceOnRCWCleanup al cerrar aplicaciones WPF
- 27. Refrescando ventana principal después de cerrar ventana emergente
- 28. ¿Cómo cerrar una ventana de Tkinter presionando un botón?
- 29. ¿Cómo sé qué monitor es una ventana WPF en
- 30. Página contra ventana en WPF?
: - Buen trabajo. En realidad, quiero cerrar Window2 desde MainWindow. Gracias por adelantado. –
@AnoopMohan Cerrar un formulario por el formulario que lo creó es mucho más fácil, solo tiene que mantener la referencia al formulario creado y llamar al método Cerrar en él. –
: - Gracias, señor. . Ahora puedo cerrar la ventana. Pero necesito hacer una cosa más ...Quiero cerrar la ventana y abrir la misma ventana con diferente valor durante el mismo evento. Perdón por molestarte. . Gracias por adelantado. . –