1

ですから、それは明らかに単純なことですが、私はすでにこのトピックについて多くの時間を失っています。私には非常に単純な(私の意見ではそうあるべきですが)方法があり、そのタスクは私の親フォームのすべてのボタンを反復処理することです。

ここにあります:

public void SetForeColor(BaseForm frm, Form f)
{
    foreach (ToolStripButton button in frm.Controls.OfType<ToolStripButton>())
    {               
            MessageBox.Show("Soles clicked"+" "+f.Name.ToString());
    }

}

as値BaseForm frmを取るべき引数はどこにありますか。MDIparent私は実際にMDIparent:を取得する別のメソッドからこのメソッドを呼び出します

 protected void LoadForm<T>(ToolStripButton formButton, string buttonText) where T : Form
        {
            MainForm frm = this.MdiParent as MainForm;
            if (frm == null) frm = this as MainForm;
            T sendTo;
....
            SetForeColor(frm, sendTo);

しかし、私は何の反応もありません。関数はLoadForm<T>正常に動作しているので、私は間違いを犯していると思いますが、それは私にはforeach非常に簡単に思えます...

4

4 に答える 4

1

ボタンはフォームの直接の子ではなく、それ自体がフォームの子であるToolStripコンポーネントに含まれている可能性があります。

次のようなものを試してください:

foreach (ToolStrip toolStrip in frm.Controls.OfType<ToolStrip>()) {
    foreach (ToolStripButton button
             in toolStrip.Controls.OfType<ToolStripButton>()) {               
        MessageBox.Show("Soles clicked " + f.Name);
    }
}
于 2013-02-08T14:01:39.033 に答える
1

が.netFrameworkToolStripButtonの標準ボタンであるとすると、フォームのコントロールコレクションforeachにタイプのボタンがないため、ループは実行されません。ToolStripButton

ToolStripButtonsは、MenuStrip、ToolStrip、またはStatusStripの親である必要があるため、ツールストリップのコントロールを繰り返す必要があります。

foreach (var strip in frm.Controls.OfType<ToolStrip>())
{
     foreach (var item in strip.Items)
     {
          MessageBox.Show("Soles clicked " + f.Name.ToString());
     }
}
于 2013-02-08T14:05:59.163 に答える
0

フォームも同じタイプであるかどうかを確認する必要があります。

foreach (Form frm in this.MdiChildren)
    {
        if (frm.GetType() == form.GetType() 
            && frm != form)
        {
            frm.Close();
        }
    }
于 2013-02-08T14:00:19.417 に答える
0

foreachステートメントは、コントロールコレクションの最上位レイヤーのみを検索します。

foreach (ToolStripButton button in frm.Controls.OfType<ToolStripButton>()) {               
    MessageBox.Show("Soles clicked"+" "+f.Name.ToString());
}

実際にはコレクション内のコレクション内のコレクションですが...など。コントロールコレクションとそのすべての子孫を検索する必要があります。

この質問に対する答えには、すべての子孫を取得する方法があります。

于 2013-02-08T14:03:19.430 に答える