Как всплывающая форма входа при запуске для ввода пароля (она не всплывает в конструкторе MainPage)

Я работаю в Silverlight и создал дочернее окно, в котором у меня есть имя пользователя и пароль.

private void OKButton_Click(object sender, RoutedEventArgs e)
{
    if (txtUsrname.Text == "Username" && txtPassword.Password == "Password") 
    {
        this.DialogResult = true; 
    } 
    else 
    {
        MessageBox.Show("Incorrect username and/orpassword","Error",MessageBoxButton.OK);
    }
}

private void CancelButton_Click(object sender, RoutedEventArgs e) 
{
    this.DialogResult = false;
}

И после того, как у меня есть моя главная страница, которая содержит весь графический интерфейс проекта. Вот так: (Здесь также попробуйте открыть ChildWindow, но это не так, но когда я помещаю MessageBox.Show("Hello"); затем он всплывает)

public partial class MainPage : UserControl
{
    public MainPage()
    {
        loginChildWindow obj = new loginChildWindow();
        obj.Show();   //It do not pop up actually
         MessageBox.Show("hello");  //whereas thsi messagebox popups
        InitializeComponent();
    }
}

Поэтому, чтобы установить логин ChildWindow во время запуска моего проекта, я думаю, что должен сделать InitializeComponent();, только если мой пароль и имя пользователя совпадают. поэтому этот InitializeComponent(); должен вызываться внутри

if (txtUsrname.Text == "Username" && txtPassword.Password == "Password") 
 {
  InitializeComponent();
 }

Но когда я это сделаю, это выдаст ошибку (очевидно, что я не могу сделать это в конструкторе):

 public partial MainPage : UserControl
 {
    {
        public MainPage()
        {
            private void OKButton_Click(object sender, RoutedEventArgs e)
            {
                if (txtUsrname.Text == "Username" && txtPassword.Password == "Password") 
                {
                    this.DialogResult = true;
                    InitializeComponent();
                } 
                else 
                {
                    MessageBox.Show("Incorrect username and/orpassword","Error",MessageBoxButton.OK);
                }
            }
        private void CancelButton_Click(object sender, RoutedEventArgs e) 
        {
            this.DialogResult = false;
        }    
    }

Но как решить это мой вопрос?

ИЗМЕНИТЬ ПОСЛЕ комментариев пользователя 1: два класса:

 public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
            Loaded += MainPage_Loaded;

        }

       private void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            Visibility = Visibility.Collapsed;
            loginChildWindow log = new loginChildWindow();

            log.Show();
        }

    }

и

 public partial class loginChildWindow : ChildWindow
    {
        public loginChildWindow()
        {            
            InitializeComponent();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (txtUsrname.Text == "Username" && txtPassword.Password == "Password")
            {
                MainPage obj = new MainPage();
                obj.Visibility = Visibility.Visible;
                obj.InitializeComponent();
               this.DialogResult = true;            
            }
            else
            {
                MessageBox.Show("Incorrect username and/orpassword", "Error", MessageBoxButton.OK);
            }
        }
        private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

        private void Login_Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {

        }
    }

person Sss    schedule 10.07.2014    source источник
comment
возможный дубликат Показать дочернее окно перед InitializeComponent   -  person user1    schedule 11.07.2014
comment
@ user1 спасибо за ссылку. Я попробовал данную ссылку, но проблема в том, что когда я ввожу правильный пароль, он все равно не показывает мне графический интерфейс, даже если я успешно вхожу в систему, он все равно ничего не показывает. видите, я установил видимость в моем условии if: if (txtUsrname.Text == Имя пользователя && txtPassword.Password == Пароль) { this.DialogResult = true; Видимость = Видимость.Видимость; }   -  person Sss    schedule 11.07.2014
comment
@user1 Я также пробовал это (но по-прежнему не отображает никаких элементов пользовательского интерфейса при правильном входе в систему): if (txtUsrname.Text == Имя пользователя && txtPassword.Password == Пароль) { this.Visibility = Visibility.Visible; это.ДиалогРезультат = Истина; ИнициализироватьКомпонент(); }   -  person Sss    schedule 11.07.2014
comment
вы не слушаете ничего из того, что я говорю. InitializeComponent() должен быть первым, что вы делаете на главной странице. Чтобы ничего не показывать до подтверждения пароля, используйте Visibility.Collapsed на главной странице и измените на Visibility.Visible после подтверждения.   -  person user1    schedule 11.07.2014
comment
Но код для подтверждения пароля (то есть If CONDITION) прописан в классе LoginPage.xaml.cs. тогда как мы установили видимость в классах MainPage.xaml.cs. Поэтому, когда я попытался установить видимость в классе LoginPage.xaml.cs, правильно ввел информацию для входа (здесь: if (txtUsrname.Text == Имя пользователя && txtPassword.Password = = Пароль) { this.Visibility = Visibility.Visible; this.DialogResult = true; InitializeComponent(); } ) ЭТО ПО-ПРЕЖНЕМУ НЕ ПОКАЗЫВАЕТ КАКИХ-ЛИБО ЭЛЕМЕНТОВ ИНТЕРФЕЙС-ИНТЕРФЕЙСА.   -  person Sss    schedule 11.07.2014
comment
@user1, пожалуйста, смотрите правку кода.   -  person Sss    schedule 11.07.2014
comment
Я имею в виду, что проблема будет заключаться в том, как узнать в классе MainPage.xaml.cs, что если пароль, введенный в классе loginChildWindow.cs, верен или нет, чтобы я мог установить видимость в классе MainPage.xaml.cs?   -  person Sss    schedule 11.07.2014
comment
см. мою правку на ваш вопрос   -  person user1    schedule 11.07.2014
comment
где твоя редакция? это было 18 часов назад? :П   -  person Sss    schedule 11.07.2014
comment
Да я видел. Не могли бы вы написать это в ответе ниже, чтобы я пометил это как ответ?   -  person Sss    schedule 11.07.2014
comment
Но все же есть проблема. Что, если пользователь нажмет «Отмена»?   -  person Sss    schedule 11.07.2014


Ответы (1)


пытаться:

public MainPage()
        {
            InitializeComponent();    
            LoginWindow loginWnd=new LoginWindow();
            loginWnd.Closed+= new EventHandler(loginWnd_Closed);
            loginWnd.Show();          
        }
        void loginWnd_Closed(object sender, EventArgs e)
        {
            LoginWindow lw = (LoginWindow)sender;
            if (lw.DialogResult == true && lw.nameBox.Text != string.Empty)
            {
                this.textBlock1.Text = "Hello " + lw.nameBox.Text;
            }
            else if (lw.DialogResult == false)
            {
                this.textBlock1.Text = "Login canceled.";
            }
        }

где Логинвиндов:

      public LoginWindow()
      {
         InitializeComponent();
      }
      private void OKButton_Click(object sender, RoutedEventArgs e)
      {
          this.DialogResult = true;
      }
      private void CancelButton_Click(object sender, RoutedEventArgs e)
      {
          this.DialogResult = false;
      }

      private void LoginWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
      {
          if (this.DialogResult == true && (this.nameBox.Text == string.Empty || this.passwordBox.Password == string.Empty))
          {
            e.Cancel = true;             
           ChildWindow cw = new ChildWindow();
            cw.Content = "Please Enter your name and password or click Cancel.";
            cw.Show();
          }

      }

Пожалуйста, смотрите ссылку ниже для получения дополнительной информации

как-работать-с-логиномWindows

person user1    schedule 10.07.2014
comment
извините .. Почему у вас есть InitializeComponent() раньше, и, пожалуйста, объясните свою логику. почему вы просто делаете public LoginWindow; . почему не LoginWindow lm = new LoginWindow(); а затем lw.show(); ? - person Sss; 10.07.2014
comment
Вы должны убедиться, что MainPage является родительским окном для LoginWindow. Вы можете проверить это по var parent = LoginWindow.Parent; - person user1; 10.07.2014
comment
Как, если я попытаюсь сделать это в App.xaml.cs? - person Sss; 10.07.2014
comment
Это все равно не сработает. Сначала вы инициализируете пользовательский интерфейс (который уже содержится в PROJECT MainPage и после входа во всплывающее окно). - person Sss; 10.07.2014
comment
да, вы должны инициализировать главную страницу, а затем открыть дочернее окно поверх нее. Вы также можете скрыть корень макета главной страницы, установив его видимость на Visibility.Collapsed до тех пор, пока пользователь не войдет в систему, а затем вы можете изменить его на Visibility.Visible - person user1; 10.07.2014
comment
не могли бы вы написать, как я буду управлять всплывающим дочерним окном и главной страницей с кодом (как я написал в вопросе, чтобы объяснить вам мой вопрос). Так что я понимаю и отмечу как ответ, если ваш подход сработает. - person Sss; 10.07.2014
comment
См. редактирование для получения дополнительной информации. Надеюсь, ссылка поможет вам понять - person user1; 10.07.2014
comment
почему есть щелчок кнопки даже в классе MainPage()? (Button_Click) Я не собираюсь иметь никаких кнопок в моем классе MainPage. - person Sss; 10.07.2014
comment
Посмотрите на ссылку. В ссылке нажатие кнопки используется для кнопки входа. Вы можете переместить этот метод в конструктор главной страницы - person user1; 10.07.2014
comment
Я видел там. как я понимаю, MainPage состоит из кнопки, и когда мы нажимаем на эту кнопку, появляется всплывающее окно, но я хочу, чтобы при запуске моего проекта сразу открывалось дочернее окно, если имя пользователя и пароль верны, тогда он покажет элементы пользовательского интерфейса я создал в своем проекте. - person Sss; 10.07.2014
comment
как я объяснил, вы можете переместить метод в конструктор. Посмотреть изменить - person user1; 10.07.2014
comment
Не знаю, почему ты до сих пор не пытаешься меня понять. Я объяснил вам, что я не хочу ничего видеть перед страницей входа в систему, и однажды, если я войду на страницу входа, она должна направить меня к отображению пользовательского интерфейса. Мой запуск проекта должен направить меня на отображение страницы входа. Итак, почему у ВАС ЕСТЬ textBlock1 в mainpage.xaml.cs? Этот код будет иметь текстовый блок и кнопку при запуске - person Sss; 11.07.2014
comment
И ЭТОТ КОД НИКОГДА НЕ ПОЯВИТСЯ при запуске НИКОГДА.........Или, если вы все еще настаиваете на своей статистике, пожалуйста, подтвердите это, показав вывод. - person Sss; 11.07.2014