DialogText

DialogBox からタイプした文字列を取得します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. C# で DialogBox を表示して、TextBox にタイプされた文字列を表示します。
    Main のプロジェクトは自動生成で作成して、MyDialog Class は直接定義します。
  2. 自動生成でプロジェクトを構築します。
    Form1 にボタンを貼り付けて、Button_Click() メソッドを定義します。
    MyDialog の戻り値が OK のとき、Invalidate(); で再描画します。
    msg の領域は class Form1 の直後に定義して下さい。
        public static string msg = "Text Message";
    
        private void Button_Click(object sender, EventArgs e)
        {   MyDialog Mydlg = new MyDialog();
            DialogResult dr = Mydlg.ShowDialog();
    
            if (dr == DialogResult.OK)
            {
                msg = Mydlg.str;
                Invalidate();
            }
        }
    
  3. OnPaint を Overrideして msg を描画します。
    Text の描画は 大きな文字を表示する を参照して下さい。
        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
            Graphics g = e.Graphics;
            g.DrawString(msg, Font, Brushes.Black, new PointF(10f, 10f));
        }
    
  4. MyDialog Class です。
    Form1.cs の最後に追加して下さい。
    class MyDialog : Form
    {
        TextBox txtBox;
        public string   str;
    
        public MyDialog()
        {
            Text = "Dialog Text Input";
            MaximizeBox = false;
            MinimizeBox = false;
            ControlBox = false;
            ShowInTaskbar = false;
            FormBorderStyle = FormBorderStyle.FixedDialog;
    
            Width = 250;
            Height = 130;
    
            Button btnOK = new Button();
            btnOK.Text = "OK";
            btnOK.Location = new Point(30, ClientSize.Height - btnOK.Height - 5);
            btnOK.Parent = this;
            btnOK.TabIndex = 1;
            btnOK.Click += new EventHandler(btnOK_Click);
            btnOK.DialogResult = DialogResult.OK;
    
            Button btnCancel = new Button();
            btnCancel.Text = "Cancel";
            btnCancel.Location = new Point(ClientSize.Width - btnCancel.Width - 30,
                ClientSize.Height - btnCancel.Height - 5);
            btnCancel.Parent = this;
            btnCancel.TabIndex = 2;
            btnCancel.DialogResult = DialogResult.Cancel;
    
            txtBox = new TextBox();
            txtBox.Parent = this;
            txtBox.Location = new Point(10, 10);
            txtBox.Width = ClientSize.Width - 20;
            txtBox.TabIndex = 0;
        }
    
        void btnOK_Click(object sender, EventArgs e)
        {
            str = txtBox.Text;
        }
    }
    
  5. プロジェクトを実行すると Form1 が表示されます。
    ボタンクリックで MyDialog を呼び出します。
    TextBox にタイプして OK ボタンをクリックします。
    Form1 にタイプしたメッセージが表示されます。
  6. Visual Studio で MyDialog のプロパティを設定する場合は DialogBox を参照して下さい。
    MyDialog に設定する項目は次の通りです。
    • ControlBox, MaximizeBox, MinimizeBox を false に設定する。
    • FormBorderStyle を FormBorderStyle.FixedDialog に設定する。
    • OK ボタンと Cancel ボタンを貼り付ける。
      OKボタンの DialogResult プロパティで OK を選択する。
      Cancel ボタンの DialogResult プロパティで Cancel を選択する。
    • TextBox(名前はtxtBox)を貼り付ける。
    • OK ボタンの EventHandler(OK_Click)を設定する。
  7. 複数の Label や TextBox を張り付けるときは、配列で定義します。
    詳細は囲碁ソフトの
    SGF Header を参照して下さい。

リアルタイムに TEXT を取得

  1. MyDialog からタイプされた TEXT を直ちに取得して Form1 に表示します。
    TextBox が修正されたことを直ちに知るときは、TextChanged イベントを設定します。
  2. Form1 の Button_Click() では パラメータで this を渡します。
      パラメータでthisを渡します。
        private void Button_Click(object sender, EventArgs e)
        {
            MyDialog Mydlg = new MyDialog(this);
            Mydlg.ShowDialog();
        }
    
    OnPaint() は前回と同じ要領です。
  3. MyDialog Class です。
    textbox_TextChanged() でタイプされた TEXT を直接 Form1 の str に格納します。
    MyDialog Class は、Form1 と同じ namespace の中に含めて下さい。
    class MyDialog : Form
    {
        Form parent;
        public MyDialog(Form pform)
        {
            parent = pform;
            Text = "MyDialogClass";
            MaximizeBox = false;
            MinimizeBox = false;
            ShowInTaskbar = false;
            FormBorderStyle = FormBorderStyle.FixedDialog;
            ControlBox = false;
    
            Button btnOK = new Button();
            btnOK.Parent = this;
            btnOK.Text = "OK";
            btnOK.Location = new Point(
                (ClientSize.Width - btnOK.Width) / 2,
                ClientSize.Height - btnOK.Height - 5);
            btnOK.TabIndex = 1;
            btnOK.DialogResult = DialogResult.OK;
    
            TextBox textbox = new TextBox();
            textbox.Parent = this;
            textbox.Multiline = true;
            textbox.ScrollBars = ScrollBars.Vertical;
            textbox.WordWrap = true;
            textbox.Location = new Point(10, 10);
            textbox.Width = ClientSize.Width - 20;
            textbox.Height = ClientSize.Height - 25 - btnOK.Height;
            textbox.AcceptsTab = true;
            textbox.TabIndex = 0;
            textbox.TextChanged += new EventHandler(textbox_TextChanged);
        }
    
        void textbox_TextChanged(object sender, EventArgs e)
        {
            TextBox tb = (TextBox)sender;
            Form1.str = tb.Text;
            parent.Invalidate();
        }
    }
    
  4. MyDialog Class の要点は次の通りです。
  5. プロジェクトを実行すると Form1 が表示されます。
    ボタンクリックで MyDialog を呼び出します。
    TextBox にタイプした文字列が、すぐに Form1 に表示されます。

超初心者のプログラム入門(C# Frame Work)