2017-11-14 14 views
1

私はC#Winforms(初回)でアプリケーションを設計しています。私はこれまでC++でいくつかのアプリケーションを設計していましたが、C++のCLI関数の一部をC#に変換するのが難しいです。WinformsのC#ボタン配列へのC++ - CLIボタン配列

サイドバーには、ボタンのクリックごとにボタンの対応パネルの表示を切り替える5つのボタンがあります。これを行うために、私は他のすべてのパネルの可視性をfalseに設定しました。 C++でこれを達成するために - CLIを、私は次のことをやった:

private: System::Void panels_Click(System::Object^ sender, System::EventArgs^ e) { 
    System::Windows::Forms::Button^currentbutton = (System::Windows::Forms::Button ^) sender; 
    array < Panel^>^objects = { panel1, panel2, panel3, panel4, panel5, panel6}; 
    array < Button^>^buttons = { button1, button2, button3, button4, button5, button6 }; 

    for (int i = 0; i < 6; i++) { 
     if (buttons[i]->Equals(currentbutton)) { 
      objects[i]->Visible = true; 
     } 
     else objects[i]->Visible = false; 
    } 
} 

私はC#で同等のものを見つけることができないように私が午前問題は、「アレイパネル^」の部分です。どんな助けもありがとうございます。

+0

var objects = new Panel [] {panel1、panel2、panel3}; –

答えて

1

配列はTypeName[]を使用してC#で宣言されています。

Panel[] objects = { panel1, panel2, panel3, panel4, panel5, panel6 }; 
Button[] buttons = { button1, button2, button3, button4, button5, button6 }; 
-1

ControlsコレクションをList<Control>にキャストし、比較のためにコントロール名にアクセスできます。あなたの名前空間にusing System.Linq;を追加する必要がありますので、Cast<T>()方法は、LINQの拡張メソッドです:

private void panels_Click(object sender, EventArgs e) 
{ 
    List<string> panelNames = new List<string> 
    {"panel1", "panel2", "panel3", "panel4", "panel5", "panel6"}; 

    List<string> buttonNames = new List<string> 
    {"button1", "button2", "button3", "button4", "button5", "button6"}; 

    List<Control> panels = this.Controls.Cast<Control>() 
     .Where(ctrl => panelNames.Contains(ctrl.Name)).ToList(); 

    List<Control> buttons = this.Controls.Cast<Control>() 
     .Where(ctrl => buttonNames.Contains(ctrl.Name)).ToList(); 

    Button thisButton = sender as Button; 

    for (int i = 0; i < buttons.Count; i++) 
    { 
     if (i < panels.Count) panels[i].Visible = buttons[i] == thisButton; 
    } 
} 
+0

ダウン投票者、この回答をどのように改善できるか教えてください。 –