1

コンテンツが動的に変化する一連の Windows フォーム ボタンがあります。それらをすべて同じサイズの配列に保持し、すべてのボタンが互いに同じサイズを維持するように自動サイズ調整し、それが理にかなっている場合は、最大のコンテンツを持つボタンに十分な大きさにしたいと考えています。それを行う最善の方法は何ですか?

4

2 に答える 2

1

event次のようにボタン配列をループする代わりに、利点を得ることができます。

public class Form1 : Form {
   public Form1(){
      InitializeComponent();
      //I suppose buttons is your buttons array defined somewhere.
      int m = 0;
      foreach (Button button in buttons)
        {
            Binding bind = new Binding("Width", this, "ButtonMaxWidth");
            bind.DataSourceUpdateMode = DataSourceUpdateMode.Never;//This is important
            button.DataBindings.Add(bind);        
            button.AutoSize = true;     
            if(button.Width > m) m = button.Width;
            button.SizeChanged += (s, e) =>
            {
                Button but = s as Button;
                if (but.Width > ButtonMaxWidth)
                {
                    but.DataBindings["Width"].WriteValue();
                } else but.Width = ButtonMaxWidth;
            };
        }
        ButtonMaxWidth = m;//Initialize the max width, this is done only once and you don't have to loop through your buttons to update the max width because it's done via the mechanism of `Binding` and `event`.
        //Try changing the Width of any button in your buttons array
        buttons[2].Width = 300;//if this > MaxWidth, all the buttons will change its Width to the new same MaxWidth, otherwise they will stay on the current MaxWidth.            
        //Try changing the Text of one of your buttons
        buttons[1].Text = "I love Windows Presentation Foundation";
   }
   public int ButtonMaxWidth {get;set;}
}
于 2013-07-17T04:03:39.233 に答える