Более легкое открытие Windows с одним Void - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть Launcher для моего программного обеспечения, которое я пытаюсь разработать. Теперь в настройках есть «Постоянное окно», поэтому программа запуска остается открытой или нет после выбора одной из ее кнопок.

Теперь я хочу упростить процесс генерации окна с помощью частного void в том же классе. Но я не знаю, как дать пустоту необходимое окно

это проектная структура:

enter image description here

Я пробовал это с несколькими типами аргументов для вызова, такими как «строка, окно или тип», но каждый раз, когда я получаю «ххх - это переменная, но она используется как тип»

Это код кнопки, который вызывает окно будущего

        private void Btn_NewAdress_Click(object sender, RoutedEventArgs e)
        {
             fun_openWindow(Adress.frm_Adress,"new");
        }

И это новая пустота, которую я создал:

        private void fun_openWindow(Window selectedWindow, string type)
        {
            selectedWindow form = new selectedWindow();
            form.Show();

            switch (type)
            {
                case "search":
                    form.ti_search.IsSelected = true;
                    break;
                default:
                    form.ti_new.IsSelected = true;
                    break;
            }

            if (Properties.Settings.Default.persistentWindow == true)
            {
                this.Close();
            }
        }

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

Ответы [ 2 ]

1 голос
/ 02 апреля 2019

Вы можете использовать для него generic:

private void Btn_NewAdress_Click(object sender, RoutedEventArgs e)
{
    fun_openWindow<Adress.frm_Adress>("new");
}
private void fun_openWindow<YourWindow>(string type) where YourWindow: Window, new()
{
    YourWindow form = new YourWindow();
    form.Show();
}

Другой способ - использовать отражение:

private void Btn_NewAdress_Click(object sender, RoutedEventArgs e)
{
    fun_openWindow(typeof(Adress.frm_Adress), "new");
}
private void fun_openWindow(Type frmType, string type)
{
    var form = Activator.CreateInstance(frmType) as Window;
    form.Show();
}
1 голос
/ 02 апреля 2019

Ошибка

selectedWindow является переменной, но используется как тип

правильно, потому что вы действительно используете переменную selectedWindow в качестве типа.

Ошибка, вероятно, возникает в следующей строке кода:

selectedWindow form = new selectedWindow();

В левой части присваивания компилятор ожидает тип, а затем имя переменной. В вашем случае вы указали имя переменной (selectedWindow), а затем другое имя переменной (form). Кроме того, в правой части присвоения компилятор ожидает ключевое слово new и тип (например, тип вашего окна), но вы указали имя переменной (selectedWindow) вместо допустимого типа. Правильный синтаксис будет:

Window form = new YourWindowClass();

Для вашей реализации YourWindowClass это либо frm_Adress, либо frm_Launcher в зависимости от отображаемого окна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...