一種のダイアログ ボックスまたはポップアップ画面のようなものを作成する必要があります。この項目の配列があり、ボタンのクリックで移動できるように、ダイアログボックスに各項目のボタンを作成する必要があります。
C#でそれを行う最良の方法は何ですか? 誰かがこれについて私を案内してもらえますか
winformsを使用している場合は、フォームに配置FlowLayoutPanel
します。次に、実行時にすべてのコントロールを追加します。
foreach(var item in items)
{
Button button = new Button();
// setup button properties
// subscribe to events
flowLayoutPanel.Controls.Add(button);
}
FlowLayoutPanelは、コントロールを自動的に配置します。
私はいくつかの概念をいじっていましたが、その一部はまさに動的対話を作成する例のようです。動的なボタンの作成を追加し、組み合わせて、テーブルまたはフロー レイアウト パネルを使用して適切にフォーマットすることができます
DialogResult result;
using (var popup = new Form())
{
popup.Size = new Size(1000, 500);
popup.Location = new Point(Convert.ToInt32(this.Parent.Width / 2) - 500, Convert.ToInt32(this.Parent.Height / 2) - 250);
popup.FormBorderStyle = FormBorderStyle.FixedDialog;
popup.MinimizeBox = false;
popup.MaximizeBox = false;
popup.Text = "My title";
var lbl = new Label() { Dock = DockStyle.Top, Padding = new Padding(3), Height = 30 };
lbl.Font = new Font("Microsoft Sans Serif", 11f);
lbl.Text = "Do you want to Continue?";
// HERE you will add your dynamic button creation instead of my hardcoded
var btnYes = new Button { Text = "Yes", Location = new Point(700, 400) };
btnYes.Click += (s, ea) => { ((Form)((Control)s).Parent).DialogResult = DialogResult.Yes; ((Form)((Control)s).Parent).Close(); };
var btnNo = new Button { Text = "No", Location = new Point(900, 400) };
btnNo.Click += (s, ea) => { ((Form)((Control)s).Parent).DialogResult = DialogResult.No; ((Form)((Control)s).Parent).Close(); };
popup.Controls.AddRange(new Control[] { lbl, btnYes, btnNo });
result = popup.ShowDialog(this);
}
if (result == DialogResult.Yes)
{
// do this
}
else
{
// do that
}
これは、ダイアログ結果出力を使用して動的ダイアログを作成する方法の例でした。
ダイアログまたは同様の親要素が sp と呼ばれ、ar がボタンの作成に使用する要素の配列であるとします。
for(YourObject obj : ar)
{
System.Windows.Controls.Button newBtn = new Button();
newBtn.Content = obj.YourProperty;
newBtn.Name = "Button" + obj.YourProperty;
sp.Children.Add(newBtn);
}