WPF 창이 열려 있는지 확인하는 방법
WPF 창에서 열려 있는지 확인하려면 어떻게 해야 합니까?
창 인스턴스를 1개만 여는 것이 목표입니다.
상위 창에 있는 내 유사 코드는 다음과 같습니다.
if (this.m_myWindow != null)
{
if (this.m_myWindow.ISOPENED) return;
}
this.m_myWindow = new MyWindow();
this.m_myWindow.Show();
편집:
저는 제 초기 문제를 해결할 수 있는 해결책을 찾았습니다.창문대화 상자 표시();
모달 팝업처럼 사용자가 다른 창을 열지 못하도록 차단합니다.이 명령을 사용하면 창이 이미 열려 있는지 확인할 필요가 없습니다.
인WPF
공개된 컬렉션이 있습니다.Windows
에서Application
클래스, 당신은 창문이 열려있는지 확인하는 도우미 방법을 만들 수 있습니다.
다음은 확인할 예입니다.Window
확실한Type
또는Window
특정 이름이 열려 있거나 둘 다 있습니다.
public static bool IsWindowOpen<T>(string name = "") where T : Window
{
return string.IsNullOrEmpty(name)
? Application.Current.Windows.OfType<T>().Any()
: Application.Current.Windows.OfType<T>().Any(w => w.Name.Equals(name));
}
용도:
if (Helpers.IsWindowOpen<Window>("MyWindowName"))
{
// MyWindowName is open
}
if (Helpers.IsWindowOpen<MyCustomWindowType>())
{
// There is a MyCustomWindowType window open
}
if (Helpers.IsWindowOpen<MyCustomWindowType>("CustomWindowName"))
{
// There is a MyCustomWindowType window named CustomWindowName open
}
다음의 경우 확인할 수 있습니다.m_myWindow==null
그런 다음 창을 만들고 표시합니다.창이 닫히면 변수를 다시 null로 설정합니다.
if (this.m_myWindow == null)
{
this.m_myWindow = new MyWindow();
this.m_myWindow.Closed += (sender, args) => this.m_myWindow = null;
this.m_myWindow.Show();
}
LINQ를 사용하여 이를 달성하는 또 다른 방법은 다음과 같습니다.
using System.Linq;
...
public static bool IsOpen(this Window window)
{
return Application.Current.Windows.Cast<Window>().Any(x => x == window);
}
용도:
bool isOpen = myWindow.IsOpen();
창이 발견되면 창을 활성화해야 하는 경우 아래 코드를 사용할 수 있습니다.
//activate a window found
//T = Window
Window wnd = Application.Current.Windows.OfType<T>().Where(w => w.Name.Equals(nome)).FirstOrDefault();
wnd.Activate();
이름이 붙은 정적인 풀을 클래스에 배치합니다._open
아니면 그런 비슷한 것.생성자에서 다음을 수행합니다.
if (_open)
{
throw new InvalidOperationException("Window already open");
}
_open = true;
및 Closed 이벤트:
_open = false;
검색하는 거예요?
if (this.m_myWindow != null)
{
if (this.m_myWindow.IsActive) return;
}
this.m_myWindow = new MyWindow();
this.m_myWindow.Show();
싱글톤을 원한다면 다음을 읽어야 합니다: 창에 싱글톤 인스턴스를 만들려면 어떻게 해야 합니까?
void pencereac<T> (int Ops) where T : Window , new()
{
if (!Application.Current.Windows.OfType<T>().Any()) // Check is Not Open, Open it.
{
var wind = new T();
switch (Ops)
{
case 1:
wind.ShowDialog();
break;
case 0:
wind.Show();
break;
}
}
else Application.Current.Windows.OfType<T>().First().Activate(); // Is Open Activate it.
}
Kullanmm::
void Button_1_Click(object sender, RoutedEventArgs e)
{
pencereac<YourWindow>(1);
}
두 번째 양식이 이미 열려 있는지 확인하고 클릭 단추를 눌러 다시 열지 않으려면 이 기능이 작동합니다.
int formcheck = 0;
private void button_click()
{
Form2Name myForm2 = new Form2Name();
if(formcheck == 0)
{
myForm2.Show(); //Open Form2 only if its not active and formcheck == 0
// Do Somethin
formcheck = 1; //Set it to 1 indicating that Form2 have been opened
{
{
public bool IsWindowOpen<T>(string name = "") where T : Window
{
return Application.Current.Windows.OfType<T>().Any(w => w.GetType().Name.Equals(name));
}
언급URL : https://stackoverflow.com/questions/16202101/how-do-i-know-if-a-wpf-window-is-opened
'source' 카테고리의 다른 글
Linux 시스템에 연결된 모든 저장 장치 찾기 (0) | 2023.05.26 |
---|---|
DataContext 속성을 사용하여 XAML의 창에 ViewModel을 설정하려면 어떻게 해야 합니까? (0) | 2023.05.26 |
XML 구문 분석을 위한 최상의 노드 모듈 (0) | 2023.05.26 |
Windows Azure PaaS(웹 역할)의 진정한 대안은 무엇입니까? (0) | 2023.05.26 |
Python Enum을 확장하는 방법은 무엇입니까? (0) | 2023.05.26 |