all groups > vb.net > march 2006 >
vb.net :
Derived TextBox
Question : I want to create a read only TextBox that does not respond to any input from the keyboard, therefore I came up with the following derived class : Option Strict On Imports System.Windows.Forms.TextBox Public Class DerivedTextBox Inherits TextBox Protected Overridable Sub KeyEventHandler( _ ByVal sender As Object, _ ByVal e As KeyEventHandler) End Sub End Class I then place this TextBox on my Form1 using the following : Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call Me.TextBox1.Show() ' 'TextBox1 ' Me.TextBox1.AutoSize =3D False Me.TextBox1.Location =3D New System.Drawing.Point(8, 8) Me.TextBox1.Multiline =3D True Me.TextBox1.Name =3D "TextBox1" Me.TextBox1.ReadOnly =3D True Me.TextBox1.Size =3D New System.Drawing.Size(230, 150) Me.TextBox1.TabIndex =3D 1 Me.TextBox1.TabStop =3D False Me.TextBox1.Text =3D "" Me.TextBox1.Visible =3D True End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As = Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub Friend WithEvents TextBox1 As DerivedTextBox However the TextBox remains invisible. How can I get
Your right ! ! ! , I needed to make the following addition : Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label1, = Me.Button1, Me.TextBox1}) Unfortunately, I'm still back to square one, my TextBox1 still responds to keyboard events. Is there a way to rewrite the Class DerivedTextBox to prevent keyboard response ? [quoted text, click to view] "Ken Tucker [MVP]" <vb2ae@bellsouth.net> wrote in message = news:%235TUr3hUGHA.5372@TK2MSFTNGP09.phx.gbl... > Hi, >=20 > I dont see where you added it to the form's controls. >=20 > Ken > ------------------ > "Rob" <rls_jls@worldnet.att.net> wrote in message=20 > news:u0cgbsgUGHA.4436@TK2MSFTNGP10.phx.gbl... > Question : I want to create a read only TextBox that does not > respond to any input from the keyboard, therefore I came up > with the following derived class : >=20 > Option Strict On >=20 > Imports System.Windows.Forms.TextBox >=20 > Public Class DerivedTextBox > Inherits TextBox >=20 > Protected Overridable Sub KeyEventHandler( _ > ByVal sender As Object, _ > ByVal e As KeyEventHandler) >=20 > End Sub >=20 > End Class >=20 >=20 > I then place this TextBox on my Form1 using the following : >=20 > Public Class Form1 > Inherits System.Windows.Forms.Form >=20 > #Region " Windows Form Designer generated code " >=20 > Public Sub New() > MyBase.New() >=20 > 'This call is required by the Windows Form Designer. > InitializeComponent() >=20 > 'Add any initialization after the InitializeComponent() call > Me.TextBox1.Show() > ' > 'TextBox1 > ' > Me.TextBox1.AutoSize =3D False > Me.TextBox1.Location =3D New System.Drawing.Point(8, 8) > Me.TextBox1.Multiline =3D True > Me.TextBox1.Name =3D "TextBox1" > Me.TextBox1.ReadOnly =3D True > Me.TextBox1.Size =3D New System.Drawing.Size(230, 150) > Me.TextBox1.TabIndex =3D 1 > Me.TextBox1.TabStop =3D False > Me.TextBox1.Text =3D "" > Me.TextBox1.Visible =3D True > End Sub >=20 > 'Form overrides dispose to clean up the component list. > Protected Overloads Overrides Sub Dispose(ByVal disposing As = Boolean) > If disposing Then > If Not (components Is Nothing) Then > components.Dispose() > End If > End If > MyBase.Dispose(disposing) > End Sub > Friend WithEvents TextBox1 As DerivedTextBox >=20 > However the TextBox remains invisible. How can I get > TextBox1 to appear on Form1 ?=20 >=20
Hi, I dont see where you added it to the form's controls. Ken ------------------ [quoted text, click to view] "Rob" <rls_jls@worldnet.att.net> wrote in message news:u0cgbsgUGHA.4436@TK2MSFTNGP10.phx.gbl...
Question : I want to create a read only TextBox that does not respond to any input from the keyboard, therefore I came up with the following derived class : Option Strict On Imports System.Windows.Forms.TextBox Public Class DerivedTextBox Inherits TextBox Protected Overridable Sub KeyEventHandler( _ ByVal sender As Object, _ ByVal e As KeyEventHandler) End Sub End Class I then place this TextBox on my Form1 using the following : Public Class Form1 Inherits System.Windows.Forms.Form #Region " Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() 'Add any initialization after the InitializeComponent() call Me.TextBox1.Show() ' 'TextBox1 ' Me.TextBox1.AutoSize = False Me.TextBox1.Location = New System.Drawing.Point(8, 8) Me.TextBox1.Multiline = True Me.TextBox1.Name = "TextBox1" Me.TextBox1.ReadOnly = True Me.TextBox1.Size = New System.Drawing.Size(230, 150) Me.TextBox1.TabIndex = 1 Me.TextBox1.TabStop = False Me.TextBox1.Text = "" Me.TextBox1.Visible = True End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub Friend WithEvents TextBox1 As DerivedTextBox However the TextBox remains invisible. How can I get TextBox1 to appear on Form1 ?
Well, I can understand that you would want to make this dependent on a property, to simulate the 'Locked' state we used to have in VB6. That allowed the control to take focus, and to navigate inside the textbox with the arrow keys, but did not allow the user to make any changes. I am looking myself for such a 'state' too, so I can set a property dependent on the users' rights. Such a state would be ideal for users who only have 'Read' rights. Currently I use the ReadOnly property for this, but that is so ugly. I looks like the control is disabled. Martin [quoted text, click to view] "Cor Ligthert [MVP]" <notmyfirstname@planet.nl> wrote in message news:u8an4hiUGHA.1572@tk2msftngp13.phx.gbl...
Rob, Why are you doing it this difficult. A label with a white background looks in my opinion the same. Cor "Rob" <rls_jls@worldnet.att.net> schreef in bericht news:u1TCgBiUGHA.5108@TK2MSFTNGP09.phx.gbl... Your right ! ! ! , I needed to make the following addition : Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label1, Me.Button1, Me.TextBox1}) Unfortunately, I'm still back to square one, my TextBox1 still responds to keyboard events. Is there a way to rewrite the Class DerivedTextBox to prevent keyboard response ? [quoted text, click to view] "Ken Tucker [MVP]" <vb2ae@bellsouth.net> wrote in message news:%235TUr3hUGHA.5372@TK2MSFTNGP09.phx.gbl... > Hi, > > I dont see where you added it to the form's controls. > > Ken > ------------------ > "Rob" <rls_jls@worldnet.att.net> wrote in message > news:u0cgbsgUGHA.4436@TK2MSFTNGP10.phx.gbl... > Question : I want to create a read only TextBox that does not > respond to any input from the keyboard, therefore I came up > with the following derived class : > > Option Strict On > > Imports System.Windows.Forms.TextBox > > Public Class DerivedTextBox > Inherits TextBox > > Protected Overridable Sub KeyEventHandler( _ > ByVal sender As Object, _ > ByVal e As KeyEventHandler) > > End Sub > > End Class > > > I then place this TextBox on my Form1 using the following : > > Public Class Form1 > Inherits System.Windows.Forms.Form > > #Region " Windows Form Designer generated code " > > Public Sub New() > MyBase.New() > > 'This call is required by the Windows Form Designer. > InitializeComponent() > > 'Add any initialization after the InitializeComponent() call > Me.TextBox1.Show() > ' > 'TextBox1 > ' > Me.TextBox1.AutoSize = False > Me.TextBox1.Location = New System.Drawing.Point(8, 8) > Me.TextBox1.Multiline = True > Me.TextBox1.Name = "TextBox1" > Me.TextBox1.ReadOnly = True > Me.TextBox1.Size = New System.Drawing.Size(230, 150) > Me.TextBox1.TabIndex = 1 > Me.TextBox1.TabStop = False > Me.TextBox1.Text = "" > Me.TextBox1.Visible = True > End Sub > > 'Form overrides dispose to clean up the component list. > Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) > If disposing Then > If Not (components Is Nothing) Then > components.Dispose() > End If > End If > MyBase.Dispose(disposing) > End Sub > Friend WithEvents TextBox1 As DerivedTextBox > > However the TextBox remains invisible. How can I get > TextBox1 to appear on Form1 ? > >
[quoted text, click to view] "Rob" <rls_jls@worldnet.att.net> wrote in message news:u1TCgBiUGHA.5108@TK2MSFTNGP09.phx.gbl... > Your right ! ! ! , I needed to make the following addition :
Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label1, Me.Button1, Me.TextBox1}) [quoted text, click to view] > Unfortunately, I'm still back to square one, my TextBox1 still
responds to keyboard events. Is there a way to rewrite the Class DerivedTextBox to prevent keyboard response ? FWIW, I always try a label first for this. I'm assuming that won't work for you? Disabling shortcuts and making it readonly isn't enough?
Rob, Why are you doing it this difficult. A label with a white background = looks in my opinion the same. Cor "Rob" <rls_jls@worldnet.att.net> schreef in bericht = news:u1TCgBiUGHA.5108@TK2MSFTNGP09.phx.gbl... Your right ! ! ! , I needed to make the following addition : Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label1, = Me.Button1, Me.TextBox1}) Unfortunately, I'm still back to square one, my TextBox1 still responds to keyboard events. Is there a way to rewrite the Class DerivedTextBox to prevent keyboard response ? [quoted text, click to view] "Ken Tucker [MVP]" <vb2ae@bellsouth.net> wrote in message = news:%235TUr3hUGHA.5372@TK2MSFTNGP09.phx.gbl... > Hi, >=20 > I dont see where you added it to the form's controls. >=20 > Ken > ------------------ > "Rob" <rls_jls@worldnet.att.net> wrote in message=20 > news:u0cgbsgUGHA.4436@TK2MSFTNGP10.phx.gbl... > Question : I want to create a read only TextBox that does not > respond to any input from the keyboard, therefore I came up > with the following derived class : >=20 > Option Strict On >=20 > Imports System.Windows.Forms.TextBox >=20 > Public Class DerivedTextBox > Inherits TextBox >=20 > Protected Overridable Sub KeyEventHandler( _ > ByVal sender As Object, _ > ByVal e As KeyEventHandler) >=20 > End Sub >=20 > End Class >=20 >=20 > I then place this TextBox on my Form1 using the following : >=20 > Public Class Form1 > Inherits System.Windows.Forms.Form >=20 > #Region " Windows Form Designer generated code " >=20 > Public Sub New() > MyBase.New() >=20 > 'This call is required by the Windows Form Designer. > InitializeComponent() >=20 > 'Add any initialization after the InitializeComponent() call > Me.TextBox1.Show() > ' > 'TextBox1 > ' > Me.TextBox1.AutoSize =3D False > Me.TextBox1.Location =3D New System.Drawing.Point(8, 8) > Me.TextBox1.Multiline =3D True > Me.TextBox1.Name =3D "TextBox1" > Me.TextBox1.ReadOnly =3D True > Me.TextBox1.Size =3D New System.Drawing.Size(230, 150) > Me.TextBox1.TabIndex =3D 1 > Me.TextBox1.TabStop =3D False > Me.TextBox1.Text =3D "" > Me.TextBox1.Visible =3D True > End Sub >=20 > 'Form overrides dispose to clean up the component list. > Protected Overloads Overrides Sub Dispose(ByVal disposing As = Boolean) > If disposing Then > If Not (components Is Nothing) Then > components.Dispose() > End If > End If > MyBase.Dispose(disposing) > End Sub > Friend WithEvents TextBox1 As DerivedTextBox >=20 > However the TextBox remains invisible. How can I get > TextBox1 to appear on Form1 ?=20 >=20
Yup, that does the trick, so I will override the Readonly property in my subclass to keep the original background color. That would also be the way to go for Rob I think. Thanks for your contribution Martin [quoted text, click to view] "Cerebrus" <zorg007@sify.com> wrote in message news:1143544648.968707.116820@z34g2000cwc.googlegroups.com... > Hi, > > Martin wrote : > >>> Currently I use the ReadOnly property for this, but that is so ugly. I >>> looks >>> like the control is disabled. > > Change the backcolor of the textbox back to normal, after you set it's > ReadOnly property to True. The normal behaviour is meant so that the > user gets a *visual* indication of the Readonly status. Else, users > would definitely try to type in the control a few times before > realizing that input is disabled, unless you give some other > indication. > > Regards, > > Cerebrus. >
Hi, In the keypress event you need e.handled=true Ken --------------- [quoted text, click to view] "Rob" <rls_jls@worldnet.att.net> wrote in message news:u1TCgBiUGHA.5108@TK2MSFTNGP09.phx.gbl...
Your right ! ! ! , I needed to make the following addition : Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.Label1, Me.Button1, Me.TextBox1}) Unfortunately, I'm still back to square one, my TextBox1 still responds to keyboard events. Is there a way to rewrite the Class DerivedTextBox to prevent keyboard response ? [quoted text, click to view] "Ken Tucker [MVP]" <vb2ae@bellsouth.net> wrote in message news:%235TUr3hUGHA.5372@TK2MSFTNGP09.phx.gbl... > Hi, > > I dont see where you added it to the form's controls. > > Ken > ------------------ > "Rob" <rls_jls@worldnet.att.net> wrote in message > news:u0cgbsgUGHA.4436@TK2MSFTNGP10.phx.gbl... > Question : I want to create a read only TextBox that does not > respond to any input from the keyboard, therefore I came up > with the following derived class : > > Option Strict On > > Imports System.Windows.Forms.TextBox > > Public Class DerivedTextBox > Inherits TextBox > > Protected Overridable Sub KeyEventHandler( _ > ByVal sender As Object, _ > ByVal e As KeyEventHandler) > > End Sub > > End Class > > > I then place this TextBox on my Form1 using the following : > > Public Class Form1 > Inherits System.Windows.Forms.Form > > #Region " Windows Form Designer generated code " > > Public Sub New() > MyBase.New() > > 'This call is required by the Windows Form Designer. > InitializeComponent() > > 'Add any initialization after the InitializeComponent() call > Me.TextBox1.Show() > ' > 'TextBox1 > ' > Me.TextBox1.AutoSize = False > Me.TextBox1.Location = New System.Drawing.Point(8, 8) > Me.TextBox1.Multiline = True > Me.TextBox1.Name = "TextBox1" > Me.TextBox1.ReadOnly = True > Me.TextBox1.Size = New System.Drawing.Size(230, 150) > Me.TextBox1.TabIndex = 1 > Me.TextBox1.TabStop = False > Me.TextBox1.Text = "" > Me.TextBox1.Visible = True > End Sub > > 'Form overrides dispose to clean up the component list. > Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) > If disposing Then > If Not (components Is Nothing) Then > components.Dispose() > End If > End If > MyBase.Dispose(disposing) > End Sub > Friend WithEvents TextBox1 As DerivedTextBox > > However the TextBox remains invisible. How can I get > TextBox1 to appear on Form1 ? > >
That makes me wonder... Why didn't MS put a ReadOnly property on other controls, such as the combobox, checkbox and radiobutton? Now everybody who needs that (and/or used it in VB6) has to re-invent the wheel all over again. [quoted text, click to view] "Cerebrus" <zorg007@sify.com> wrote in message news:1143544648.968707.116820@z34g2000cwc.googlegroups.com... > Hi, > > Martin wrote : > >>> Currently I use the ReadOnly property for this, but that is so ugly. I >>> looks >>> like the control is disabled. > > Change the backcolor of the textbox back to normal, after you set it's > ReadOnly property to True. The normal behaviour is meant so that the > user gets a *visual* indication of the Readonly status. Else, users > would definitely try to type in the control a few times before > realizing that input is disabled, unless you give some other > indication. > > Regards, > > Cerebrus. >
Hi Rob, If you simply must use a TextBox, contrary to the wise suggestions of Cor and Homer (who suggested using a label), you still don't have to create a Derived class. Creating a derived textbox seems too much effort to incorporate such basic functionality. You just need to add the *normal* textbox to your form, and you could set it's ReadOnly property to True. To make it even more *unresponsive*, simply handle the Keypress and KeyDown events, and within each set "e.Handled = True", where e is specific type of EventArgs for each of the mentioned events. Regards, Cerebrus.
Hi, Martin wrote : [quoted text, click to view] >> Currently I use the ReadOnly property for this, but that is so ugly. I looks >> like the control is disabled.
Change the backcolor of the textbox back to normal, after you set it's ReadOnly property to True. The normal behaviour is meant so that the user gets a *visual* indication of the Readonly status. Else, users would definitely try to type in the control a few times before realizing that input is disabled, unless you give some other indication. Regards, Cerebrus.
Don't see what you're looking for? Try a search.
|
|
|