2013-03-30 3 views
0

Моя проблема имеет дело с 3 формы:
Использование дочернего окна из двух различных родительских окон в C#

MainWindow.cs
SettingsWindow.cs
AuthenticationWindow.cs

Окно настроек содержит информацию, как «Запросить пароль при запуске или нет».

Я вызываю окно проверки подлинности из окна настроек, чтобы удалить пароль (когда пароль установлен).

Я вызываю окно аутентификации также во время запуска (когда установлен пароль).

Мое окно проверки подлинности взаимодействует с окном настроек с использованием переменной Static (чтобы сказать, успешна ли аутентификация или нет).

Но для повторного использования одного и того же кода (то есть для вызова того же окна аутентификации во время запуска), я не могу сообщить MainWindow, является ли проверка подлинности успешной или нет. Однако я должен как-то использовать код повторно.

Мой вопрос: Можно ли уведомить Окно ребенка, у кого родительское окно? Если да, пример кода, пожалуйста ...

Надеюсь, мой вопрос ясен.

Просьба помочь!

+0

Можно ли подписаться на успешные или неудачные попытки аутентификации. – kenny

+0

Вы хотите приобрести ребенка. – David

+0

@ Давид: Да. Я хочу знать, какая родительская форма называется дочерней формой? Чтобы добавить деталь к моему вопросу, окно проверки подлинности является дочерним, а два других - родителями. –

ответ

0

Я предполагаю, что проверка подлинности Window используется с ShowDialog() вдоль линий:

AuthenticationWindow auth = new AuthenticationWindow(); 
if (auth.ShowDialog(this) == DialogResult.Ok) 
{ 
    // we know it was successful 
} 

Тогда в AuthenticationWindow, когда вы имели успеха вы будете звонить:

 DialogResult = DialogResult.Ok; 
     Close(); 

, чтобы получить дополнительную информацию или сообщить о ее ошибке

 DialogResult = DialogResult.Cancel; 
     Close(); 

В качестве альтернативы, вы можете установить свойство на AuthenticationWindow:

class AuthenticationWindow : Form 
{ 
    public bool Success { get; set;} 


} 

и установить значение успеха надлежащим образом из кода AuthenticationWindow.


Наконец, если вы хотите сразу же кормить обратно к отправке на другие окна, рассмотреть вопрос об осуществлении события:

class AuthenticationWindow : Form 
{ 
    public event Action<bool> SignalOutcome; 

    private OnSignalOutcome(bool result) 
    { 
      Action<bool> handler = SignalOutCome; 
      if (handler != null) handler(result); 
    } 
} 

Тогда вам придется подписаться на это событие, где вы вызываете окно аутентификации :

AuthenticationWindow auth = new AuthenticationWindow(); 
auth.SignalOutcome += (outcome) => { /* do something with outcome here */ }; 

auth.ShowDialog(this); 
+0

Эй, парень! Большое спасибо за помощь ... Решила проблему отлично в соответствии с вашим руководством :) :) :) –

0
ChildWindow c1=new ChildWindow(); 
c1.Owener=authenticationWindow; 
c1.Show(); //or ShowDialog(); 

ChildWindow c2=new ChildWindow(); 
c1.Owener=anotherWindow; 
c2.Show(); //or ShowDialog(); 

//to get the parent, use the property c.Owner 
if(c.Owner is AuthenticationWindow) //AuthenticationWindow is the type of authenticationWindow instance 
{ 
... 
} 
+0

Спасибо за помощь! –

Смежные вопросы