Проверить, нажата ли кнопка в другом окне

Я хочу открыть окно, если нажата кнопка, и эта кнопка находится в другом окне. Итак, как проверить, нажата ли кнопка в другом окне или нет?

Теперь я пишу код в классе RightButton.cs. Я хочу открыть окно с названием «PopUp» при нажатии кнопки «Добавить» в окне «Причина».

PaidOutReason paid = new PaidOutReason(trnprt, apiParameters); 

paid.ShowDialog(); 

if (paid.btnSave.ClickMode == new ClickMode()) 
{ 
    PopUpBanks popu = new PopUpBanks(this); 
    popu.Show(); 
}

Этот работал отлично, но мне пришлось удалить ShowDialog () и заменить его на Show (). Тогда это не сработало.

Это для POS-системы. Он имеет пользовательский элемент управления под названием «Клавиатура». Когда открывается окно «Причина», эта клавиатура также должна быть открыта. Поэтому мне пришлось заменить ShowDialog () на Show ().

Другое окно означает другое окно вашего приложения или других запущенных приложений?

Mojtaba Tajik 10.09.2018 07:09

другое окно в моем приложении

Chameena Hiruni 10.09.2018 07:09

Так почему бы вам не поместить код выполнения окна в кнопку этого окна?

Mojtaba Tajik 10.09.2018 07:10

Теперь я кодирую в классе под названием «RightButton.cs». Я хочу открыть окно с именем «PopUp» при нажатии кнопки «Добавить» в окне «Причина».

Chameena Hiruni 10.09.2018 07:12

Вы используете шаблон MVVM и контейнер внедрения зависимостей?

Sir Rufo 10.09.2018 07:14

да шаблон MVVM использует

Chameena Hiruni 10.09.2018 07:14

Я новичок в этом MVVM, и теперь я использую его в своем проекте. Вы можете помочь мне решить мою проблему?

Chameena Hiruni 10.09.2018 07:17

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

Chameena Hiruni 10.09.2018 07:25

Это окно такое же, как и окно причины :) с числами, которые нужно щелкнуть, и кнопкой ввода

Chameena Hiruni 10.09.2018 07:30

Не могли бы вы добавить образец кода в верхний пост?

dontbyteme 10.09.2018 07:43
0
10
463
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я бы добавил событие в окно и привязал к нему обработчик событий.

class WndWindow{
    BtnPaid_Click(object sender, EventArgs e){
        using(var paid = new PaidOutReason()){
            paid.BtnAddClick += Paid_BtnAddClick;
            paid.ShowDialog();
            paid.BtnAddClick -= Paid_BtnAddClick;
        }
    }

    Paid_BtnAddClick(object sender, EventArgs e){
        var popu = new PopUpBanks();
        popu.Show();
    }
}

class PaidOutReason{
    public event EventHandler BtnAddClick;

    BtnAdd_Click(object sender, EventArgs e){
        //Do standard event handler code

        BtnAddClick?.Invoke(this, e);
    }
}

Если вам нужно выполнить какие-либо проверки, вы можете сделать это перед чтением события и просто вернуться, если проверки не пройдут.

Извините, не могли бы вы упомянуть имена окон и классов как мои. Мне это несколько непонятно.

Chameena Hiruni 10.09.2018 08:19

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

TheBeardedQuack 10.09.2018 09:29

что это за «класс WndWindow» и «Paid_BtnAddClick»?

Chameena Hiruni 10.09.2018 10:11

Вы можете использовать статические элементы управления в своем приложении. Начните с объявления статического объекта окна, например, в App.xaml.cs

public static PaidOutReason paidOutWindow;

затем в методе конструктора приложения после Инициализирующий компонент () инициализируйте класс статического окна:

paidOutWindow = new PaidOutReason();

Вы можете задаться вопросом, что это вам дает. Поскольку это приложение POS, вы, вероятно, будете использовать один и тот же набор окон довольно часто и неоднократно, что означает, что вы можете удерживать объект окна в памяти и ссылаться на него (и при необходимости изменять). Кроме того, после этого вы получите доступ ко всем структурам внутри объекта PaidOutReason, набрав

App.paidOutWindow.FunctionName();

и, наконец, у вас должен быть доступ ко всем оконным функциям, таким как ShowDialog ().

Я попробую это

Chameena Hiruni 10.09.2018 10:27

Если вы используете шаблон MVVM, вы можете использовать привязку команд для отображения окна PopupBanks. Например:

public class ViewModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public ICommand AddCommand { get; set; }

        public ViewModel()
        {
            AddCommand = new RelayCommand(AddCommandHandler);

        }

        private void AddCommandHandler()
        {
            IPopUpBanks popu = new PopUpBanks(this);
            popu.Show();
        }
    }

PaidOutReason вид: 1. <Button x:Name="Add" Command={Binding AddCommand}/> 2. Установите указанную выше модель представления в качестве контекста данных представления PaidOutReason.

Создайте интерфейс IPopUpBanks, содержащий метод Show (), и реализуйте этот интерфейс в представлении PopUpBanks.

Обработайте событие Click для btnSave:

PaidOutReason paid = new PaidOutReason(trnprt, apiParameters);
paid.btnSave.Click += (ss, ee) => 
{
    PopUpBanks popu = new PopUpBanks(this);
    popu.Show();
};
paid.Show();
Ответ принят как подходящий

Вместо окна клавиатуры я сделал его пользовательским элементом управления, а затем инициализировал там событие. Затем я вставляю этот элемент управления с клавиатуры в окно PaidOutReason и затем вызываю событие. Затем я смог использовать ShowDialog () для вызова окна.

Другие вопросы по теме