วันอังคารที่ 13 ธันวาคม พ.ศ. 2559

Revit API MessageBox จาก TaskDialog

TaskDialog ถ้าไม่มี Option อะไรเลย จะเป็น Message ธรรมดา

TaskDialog.Show("Title","Message");

จะมีแค่ ปิด Dialog เท่านั้น
กรณีต้องการ "Yes", "No"
ให้เพิ่ม
 TaskDialogResult tdr=   TaskDialog.Show("วัตถุนี้เป็น Link!", "ตอบ (Yes) หรือ (No)", TaskDialogCommonButtons.Yes | TaskDialogCommonButtons.No);

         TaskDialog.Show("??",tdr.ToString());

จะได้ผล เป็น "Yes" หรือ "No"

และถ้าต้องการหลายๆ ทางเลือก
ลอง แบบนี้

TaskDialog td = new TaskDialog("Decision");
            td.MainContent = "What do you want to do?";
            td.AddCommandLink(TaskDialogCommandLinkId.CommandLink1,
                               "Use Simple Insertion Point",
                               "This option works for free-floating items");
            td.AddCommandLink(TaskDialogCommandLinkId.CommandLink2,
                                "Use Face Reference",
                                "Use this option to place the family on a wall or other surface");

            switch (td.Show())
            {
                case TaskDialogResult.CommandLink1:
                    // do the simple stuff
                    break;

                case TaskDialogResult.CommandLink2:
                    // do the face reference
                    break;

                default:
                    // handle any other case.
                    break;
            }

วันจันทร์ที่ 12 ธันวาคม พ.ศ. 2559

C# MessageBox Input Show Grid แบบง่ายๆ

ต้องการ Message Box Input แบบง่ายๆ ไม่ต้องการสร้าง Form ต่อ ท้าย ใน Class ที่กำลังทำอยู่
เวลาเรียกใช้ ก็

String ins=InputPrompt.ShowDialog("Hello","Question"," default");


 public static class InputPrompt
    {
        public static string ShowDialog(string text, string caption,string defText)
        {
            Form prompt = new Form()
            {
                Width = 500,
                Height = 150,
                FormBorderStyle = FormBorderStyle.FixedSingle,
                Text = caption,
                StartPosition = FormStartPosition.CenterScreen
            };
            Label textLabel = new Label() { Left = 50, Top = 20, Text = text };
            TextBox textBox = new TextBox() { Left = 50, Top = 50, Width = 400 };
            Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70, DialogResult = DialogResult.OK };
            confirmation.Click += (sender, e) => { prompt.Close(); };
            prompt.Controls.Add(textBox);
            prompt.Controls.Add(confirmation);
            prompt.Controls.Add(textLabel);
            prompt.AcceptButton = confirmation;
            if (defText != null) textBox.Text = defText;
            return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : "";
        }

    }

เพิ่มสำหรับ แสดง DataTable บน DataGridView
           public static string GridDialog(string caption, object dt)
            {
                System.Windows.Forms.Form prompt = new System.Windows.Forms.Form()
                {
                    Width = 500,
                    Height = 500,
                    FormBorderStyle = FormBorderStyle.FixedSingle,
                    Text = caption,
                    StartPosition = FormStartPosition.CenterScreen,   
                    AutoSizeMode=AutoSizeMode.GrowAndShrink
                    
                };
              
                DataGridView dv = new DataGridView() { Left = 1, Top = 1, Width = 400,Height =400 };
                Button confirmation = new Button() { Text = "Ok", Left = 350, Width = 100, Top = 70, DialogResult = DialogResult.OK };
                //Anchor: Top,Left
                //AutoSizeColumn: Fill
                //Dock: Fill
                dv.Dock = DockStyle.Fill;
                dv.AutoSize = true;
                dv.Anchor = AnchorStyles.Top | AnchorStyles.Left;
                prompt.Controls.Add(dv);
                prompt.Controls.Add(confirmation);
                
                prompt.AcceptButton = confirmation;
                dv.DataSource = dt; // can be datatable , List
                prompt.ShowDialog();
                return"";

            }
// ในกรณี Linq ต้องการแสดงผลบน Grid ต้องใส่ toList() ด้วย
    var result = dt.Rows.Cast<DataRow>()

                    .Select(row=> new{ key= row["BomID"].ToString(),data= row["ChildID"].ToString()}).ToList();