簡體   English   中英

檢查是否單擊了另一個窗口中的按鈕

[英]check whether a button in another window is clicked

如果要單擊一個按鈕,並且該按鈕位於另一個窗口中,我想打開一個窗口。 那么如何檢查另一個窗口中的按鈕是否被單擊呢?

現在,我正在編寫一個名為“ 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系統的。 它具有一個稱為“鍵盤”的用戶控件。 當“原因”窗口打開時,此鍵盤也要打開。 因此,我不得不用Show()替換ShowDialog()。

我將事件添加到窗口,並將事件處理程序綁定到該窗口。

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);
    }
}

如果需要執行任何檢查,則可以在讀取事件之前執行此操作,如果檢查失敗,則只需返回即可。

您可以在應用程序中使用靜態控件。 例如,從在App.xaml.cs中聲明靜態窗口對象開始

public static PaidOutReason paidOutWindow;

然后,在App構造函數方法中,在InitializingComponent()之后 ,初始化靜態窗口類:

paidOutWindow = new PaidOutReason();

您可能想知道它能給您帶來什么。 由於它是POS應用程序,因此您可能會經常重復使用同一組窗口,這意味着您可以將窗口對象保存在內存中並對其進行引用(並在需要時進行更改)。 此外,完成此操作后,您將可以通過鍵入以下內容訪問PaidOutReason對象內的所有結構:

App.paidOutWindow.FunctionName();

最后,您應該可以訪問所有窗口函數,例如ShowDialog()

如果使用的是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視圖的數據上下文。

創建一個包含Show()方法的接口IPopUpBanks並在PopUpBanks視圖上實現此接口。

處理btnSaveClick事件:

PaidOutReason paid = new PaidOutReason(trnprt, apiParameters);
paid.btnSave.Click += (ss, ee) => 
{
    PopUpBanks popu = new PopUpBanks(this);
    popu.Show();
};
paid.Show();

我使它成為用戶控件,而不是鍵盤窗口,然后在其中初始化一個事件。 然后,我將該鍵盤用戶控件插入PaidOutReason窗口,然后調用該事件。 然后,我可以使用ShowDialog()調用窗口。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM