2017-02-17 8 views
-2

так у меня есть этот frmUser, но чтобы закрыть это я должен назвать frmPass (который я назвал, используя ShowDialog() вместо Show()), который подтвердит первый, если пользователь является администратором но проблема в том, когда я исполняю коды нижеКак закрыть форму, открытую другую форму, используя ShowDialog()

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text); 
us.Hide(); 
this.Hide(); 

frmPass только скрывает себя и не вместе с frmUser. Кроме того, вот мой код вызова frmPass из frmUser

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module"); 
pass.ShowDialog(); 
+0

Непонятно, где находится код. где первая часть? –

ответ

1

В вашей форме пароля, вы должны установить DialogResult свойства этой формы. В примере; на вашем frmPass, когда пользователь нажимает кнопку «ОК», ваш код проверяет правильность имени пользователя и пароля. Если все в порядке, установите результат диалога как OK:

private void btnOk_Click(object sender, EventArgs e) 
{ 
    this.DialogResult = DialogResult.Ok; 
} 

, который закрывает форму. В frmUser вы можете, при необходимости, проверить, что DialogResult из frmPass формы, как это:

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module"); 
DialogResult dr = pass.ShowDialog(); 

if (dr == DialogResult.Ok) 
{ 
    //do code if form is closed with OK dialog result 
} 
else 
{ 
    // some warning to user... 
} 
0

Проблема заключается в том, что вы пытаетесь скрыть неправильную instace из frmUser. Я предполагаю, что первый проход кода находится внутри класса frmPass. Там вы создаете новый экземпляр, который вы пытаетесь скрыть. Но вы хотите скрыть исходный экземпляр.

Как уже сказал Нино, я также предложил бы использовать DialogResult, чтобы проверить, подтвержден ли администратор. Но может быть, у вас уже есть другой механизм. Тем не менее, вы должны поместить скрытие строки кода в класс frmUser после вызова pass.ShowDialog();

private void button1_Click(object sender, EventArgs e) 
{ 
    formPass pass = new formPass(); 
    pass.ShowDialog(); 

    if(AdminIsConfirmed) 
    { 
     this.Hide(); 
    } 
} 

оставить другой this.Hide() в frmPass, чтобы закрыть это.

EDIT

Другая возможность передать экземпляр frmUser в конструктор frmPass и имеют переменную типа frmUser в frmPass. Вы просто должны перегружать:

public partial class formPass : Form 
{ 
    formUser us; 
    public formPass(/* all that stuff that you have plus*/, formUser us) 
    { 
     InitializeComponent(); 

     this.us = us; 
    } 

вызов frmPass как это сейчас:

frmPass pass = new frmPass(lblAID.Text, lblName.Text, lblType.Text, "User Module", this); 

теперь вы можете просто удалить строку:

frmUser us = new frmUser(lblEID.Text, lblAdmin.Text, lblType.Text); 

и все это будет работать, и скрыть должным образом.

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