2016-06-24 11 views
0

So habe ich eine Funktion innerhalb einer Taste, die ich so schnell auslösen wollen, wie meine Anwendung startet, und ich tue es durch diese:Taste auf App starten

public partial class App : Application 
{ 
    private void App_OnStartup(object sender, StartupEventArgs e) 
    { 

//get button reference 

     Button btn = ((MainWindow)Current.MainWindow).btnJSON; 

//programmatically simulate button click 

     ButtonAutomationPeer peer = 
      new ButtonAutomationPeer(btn); 
     IInvokeProvider invokeProv = 
      peer.GetPattern(PatternInterface.Invoke) 
      as IInvokeProvider; 
     invokeProv.Invoke(); 
    } 
} 

Dies führt jedoch zu a nullReferenceExeption. Wie erreiche ich das, d. H. Die Funktion in der App stratup aufrufen oder den Buttonklick simulieren? Hier

ist die Schaltfläche Signatur:

public void btnJSON_Click(object sender, RoutedEventArgs e) 
{ 
    ... 
} 

Dank.

+0

Ich habe keine Ahnung, was in diesem ersten Codeblock passiert. Allerdings können Sie in WPF einen Klick auf eine Schaltfläche mit 'RaiseEvent' simulieren. Schau mal hier: http://stackoverflow.com/questions/4734482/button1-performclick-in-wpf – pay

+0

hat den Code für bessere Lesbarkeit kommentiert. –

+0

Nein, ich konnte es lesen, ich meinte nur, es ist sehr verworren. Sie benötigen nur eine einzige Linie, um den Klick der Schaltfläche zu simulieren. Ich kann jedoch auch vorschlagen, dass es bei der Simulation einer Schaltfläche auf Start klicken, um einige Operationen auszuführen, es viel sinnvoller wäre, diese Operation beim Start einfach auszuführen, anstatt diese Operation mit einem simulierten Mausklick zu starten. – pay

Antwort

5

Anstatt zu versuchen, auf die Schaltfläche klicken aufzurufen, nur um die Methode aufrufen, die auf die Schaltfläche klicken aufruft .

public partial class App : Application 
{ 
    private void App_OnStartup(object sender, StartupEventArgs e) 
    { 
     ((MainWindow)Current.MainWindow).DoStuff(); 
    } 
} 

In Ihrem MainWindow.xaml.cs:

public void DoStuff() 
{ 
    // TODO: Do Stuff 
} 

einfach Ihre Schaltfläche Click-Handler diese Methode aufrufen müssen.

public void btnJSON_Click(object sender, RoutedEventArgs e) 
{ 
    DoStuff(); 
} 
2

Klicken Sie nicht auf die Schaltfläche klicken, wenn Sie nur etwas Code ausführen möchten. Wenn Ihre Schaltfläche sieht Click-Handler wie:

public void btnJSON_Click(object sender, RoutedEventArgs e) 
{ 
    DoSomeInterestingStuff(); 
} 

Dann einfach diese Methode von Ihrem Start-Methode aufrufen:

private void App_OnStartup(object sender, StartupEventArgs e) 
{ 
    DoSomeInterestingStuff(); 
    // other stuff to do here 
} 
Verwandte Themen