0

TextBox私はウィンドウアプリケーションを持っていて、いくつかの入力コントロール( 、ComboBox)とPictureBox、Labelのような他のコントロールを持つ1つのポップアップダイアログ(フォーム)を持っています。私のフォームには2つのモードがあります1)追加または編集モード2)表示モード。表示モードでは、ユーザーは詳細のみを表示でき、入力値をコピーすることもできます (たとえば、ユーザーはTextBox値をコピーできます)。

フォーム モードがビューの場合、フォームのすべての入力コントロールに対して読み取り専用プロパティを true に設定し、Forma のコントロールを 1 つずつ反復処理します(使用for each)。しかし、特定のコントロールが入力タイプのコントロールであることをどのように知ることができるかについてはわかりません。System.Windows.Forms.ControlReadOnly プロパティがありません。ソリューションに Enable プロパティを使用できることがわかりましたが、問題は、false に設定するTextBoxとユーザーがテキスト値をコピーできないことです。Enable

特定のコントロールが入力タイプのコントロールであることをどのように知ることができますか。

ありがとう。

4

4 に答える 4

1

System.Windows.forms.clipboard.clear(); これを試して。

于 2012-09-26T11:50:40.513 に答える
0

私は次TextBoxBaseのようになると思いますinput type Control

foreach (TextBoxBase txt in this.Controls.OfType<TextBoxBase>())
{
    txt.ReadOnly = true;
}
于 2012-09-26T11:58:40.200 に答える
0

このコードはあなたを助けるかもしれません:

foreach(Control ctl in form.Controls)
{
  if (ctl is TextBox)
  {    }
  if (ctl is CheckBox)
  {    }
  if (ctl is ComboBox)
  {    }
  /* etc */
}
于 2012-09-26T11:54:43.377 に答える
0

私は通常、フォーム上のすべてのコントロールを循環してから、タイプごとに評価します。最初は少し作業が必要ですが、一度配置すると、個別に設定することを心配することなく、さらにコントロールを追加できます。

foreach (Control c in formMain.Controls)
 {
    if(c.GetType()==typeof(ComboBox))
    {
        ComboBox cb = (ComboBox) c;
        //do something
    }
    else if(c.GetType()==typeof(TextBox))
    {
        TextBox t = (TextBox) c;
        t.ReadOnly = true;
    }
 }

また、一般的なイベント ハンドラーの設定にも同じプロセスを使用します。たとえば、コントロール値をテキスト変更時の設定に保存します。したがって、コントロールと同じ名前の設定を作成すると、イベント ハンドラーに次のようなものを配置できます...

private void TextBoxTextchanged(object sender, EventArgs e)
{
    TextBox t = (TextBox) sender;
    Settings.Default[t.Name] = t.Text;
    Settings.Default.Save();
}
于 2012-09-26T12:08:27.623 に答える