1

.Net:WinFormsでプログラムによってコントロールの一部のプロパティにアクセスできないのはなぜですか?たとえば、グループボックスの「Locked」プロパティには、コードを介してアクセスすることはできません。では、プログラムでロックしたい場合、どうすればよいでしょうか。Enabled = Falseを使用すると、その中のすべてのコントロールがグレー表示されますが、これは私が望んでいることではありません。

助言がありますか ?

4

4 に答える 4

1

Locked の本当の意味を知っていますか? これは通常のプロパティではなく、とにかくランタイムには影響しません。デザイナーのみです。おそらく、解決しようとしている問題に移動する必要があります。私はあなたを保証することができます: 「ロックされた」プロパティはそのために必要ありません.

于 2010-05-15T10:14:15.617 に答える
1

Locked はプロパティではありません。リソース ファイルに格納されている値にすぎません。コントロールをロックするFormと、ブール値のリソース値$this.Lockedが true に設定されます。

IExtenderProviderさらに、一部のプロパティは、WPF の添付プロパティと同様のものを使用してコントロールに添付されます。たとえば、デザイナーにToolTipコントロールを追加した後、デザイナーはすべてのコントロールのプロパティを表示しますToolTip。コードでツールヒントのテキストを設定するには、使用する必要があります

this.toolTip1.SetToolTip(this.button1, "A button.");

ToolTipコントロールのプロパティがないためです。

ICustomTypeDescriptorまた、コントロールに対して実際に定義されているプロパティよりも、さまざまなプロパティがデザイナーに表示されるようなメカニズムが多数あります。

WinFormsコントロールをグレー表示せずに無効にする一般的な解決策がありますが、残念ながら私はそれを思い出したり見つけたりすることができません...

于 2010-05-15T10:41:10.623 に答える
0

他の人がすでに指摘しているように、実際にやりたいのはコントロールを読み取り専用にすることですが、テキストボックスとラジオボタンを除いて、これはかなり複雑になる可能性があります。

以下は、このようなものを処理するために私が書いたいくつかのコードからの抜粋ですが、クライアントは完璧ではなく安価を望んでいたので、柔軟性があり、うまくいかない可能性があります。メソッドはSetControlsReadonly(gb.Controls)(gbと呼ばれるグループボックスを想定して)によって呼び出されます。

Private Sub SetControlsReadonly(ByVal ctrls As Windows.Forms.Control.ControlCollection)
  For Each ctrl As Control In ctrls
     ctrl.Enabled = True ' first enable everything so that it'll all look the same
     If TypeOf ctrl Is TextBox Then
        CType(ctrl, TextBox).ReadOnly = True
     ElseIf TypeOf ctrl Is Button Then
        CType(ctrl, Button).Enabled = False
     ElseIf TypeOf ctrl Is CheckBox Then
        CType(ctrl, CheckBox).AutoCheck = False
     ElseIf TypeOf ctrl Is ComboBox Then
        ctrl.Enabled = False 
        if ctrl.Tag IsNot Nothing Then
            ' call method that hides the combo and instead shows a readonly textbox in the same location containing the same data
        End If
     ElseIf TypeOf ctrl Is DateTimePicker Then
        ctrl.Enabled = False
     End If
     SetControlsReadonly(ctrl.Controls)
  Next
End Sub
于 2010-05-15T12:18:17.080 に答える
0

あなたはそれを無効にすることができます!!!!

daveTextBox.Enabled = False

これにより、コントロールの外観が明らかに変わります。コントロールの外観を変更したくない場合は、キー プレス イベント ハンドラーをオーバーライドして何もしないようにします。

于 2010-05-15T10:14:41.233 に答える