2016-03-18 7 views
-2

ボタンが多いフォームがあります。WPFはボタンを関数に渡します

各ボタンはほぼ同じことをします。

  1. チェックボタン
  2. の状態を見るためにブール値の状態に基づいてコマンドを送信します。
  3. ボタンの背景を変更して状態を反映します。
  4. は、状態を修正するためにboolをリセットします。
private void button_DSK1_LowerThird_Click(object sender, RoutedEventArgs e) 
    { 

     if (button_DSK1_LowerThird_Click== false) 

     { 

      string newmessage = server.TCPmessage(Vars.ComandSDK1LowerThird); 
      string dataReturn = server.Connect(Vars.IPAdress, 5250, newmessage); 
      textBlock_output.Text = dataReturn.ToString(); 

      if (dataReturn.Contains("202")) 
      { 

       button_DSK1_LowerThird_State = true; 
       Uri resourceUri = new Uri("white-glossy-lit.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button_DSK1_LowerThird.Background = brush; 


      } 
      else 
      { 

       button_DSK1_LowerThird_State = false; 

       Uri resourceUri = new Uri("white-glossy-rectangle-button-md.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button_DSK1_LowerThird.Background = brush; 
      } 
     } 
     else 
     { 
      string newmessage = server.TCPmessage("CG 1-20 STOP 1"); 
      string dataReturn = server.Connect(Vars.IPAdress, 5250, newmessage); 
      textBlock_output.Text = dataReturn.ToString(); 

      if (dataReturn.Contains("202")) 
      { 

       button_DSK1_LowerThird_State = false; 
       Uri resourceUri = new Uri("white-glossy-rectangle-button-md.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button_DSK1_LowerThird.Background = brush; 


      } 
      else 
      { 

       button_DSK1_LowerThird_State = true; 

       Uri resourceUri = new Uri("white-glossy-lit.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button_DSK1_LowerThird.Background = brush; 
      } 
     } 

私はこのすべてが正しく動作しています。コピーして貼り付けるのではなく、button_DSK1_LowerThird_Click内のすべてのコードを関数に移動したいと思います。 私はその機能を呼び出すことができますが、coppyではなく、すべてのコードを25回貼り付けます。 私はそれを行うことができます。どのように機能するのか分かりません。 この行button_DSK1_LowerThird.Background = brush;

button_DSK1_LowerThirdを置き換えるにはどうすればいいですか?私は、少なくとも私の脳に、思った関数を呼び出すとき

、私はその後、私は私の機能チェックを持っており、そのボタンのために発生する必要があるすべてのことを行うことができそう

ButtonState(string command, Button button, bool state); 

ようにそれを呼び出すことができます。 これは私の持っている機能です。

public void ButtonState(string command, Button button, bool state) 
    { 
     CasparCG server = new CasparCG(); 

     if (state == false) 

     { 

      string newmessage = server.TCPmessage(command); 
      string dataReturn = server.Connect(Vars.IPAdress, 5250, newmessage); 

      if (dataReturn.Contains("202")) 
      { 

       state = true; 
       Uri resourceUri = new Uri("white-glossy-lit.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button.Background = brush; 


      } 
      else 
      { 

       state = false; 

       Uri resourceUri = new Uri("white-glossy-rectangle-button-md.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button.Background = brush; 
      } 
     } 
     else 
     { 
      string newmessage = server.TCPmessage("CG 1-20 STOP 1"); 
      string dataReturn = server.Connect(Vars.IPAdress, 5250, newmessage); 


      if (dataReturn.Contains("202")) 
      { 

       state = false; 
       Uri resourceUri = new Uri("white-glossy-rectangle-button-md.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button.Background = brush; 


      } 
      else 
      { 

       state = true; 

       Uri resourceUri = new Uri("white-glossy-lit.png", UriKind.Relative); 
       StreamResourceInfo streamInfo = Application.GetResourceStream(resourceUri); 

       BitmapFrame temp = BitmapFrame.Create(streamInfo.Stream); 
       var brush = new ImageBrush(); 
       brush.ImageSource = temp; 

       button.Background = brush; 
      } 
     } 

私はこれを行うより良い方法があることを知っています。私はまだそれらを学んでいません。

+0

ただ、スタックオーバーフローするトグルボタンhttps://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.togglebutton(v=vs.110).aspx –

+1

ようこそを使用し、助けを借りてください - >ツアー、あなたの質問は、私たちがあなたを助けるためのコードを示していません。ツアーを終えたら、コードを表示し、なぜヘルプが必要なのか説明してください – BugFinder

答えて

1

すべてのボタンに対して1回のクリックイベントがあり、送信者からボタンへの型キャストがあり、ボタンに基づいて機能を実行できます。

private void button_Click(object sender, RoutedEventArgs e) 
     { 
      if (sender is Button) 
      { 
       var btn = sender as Button; 
       // Here you can carry out your functionality 
      }   
     } 
関連する問題