How to use a ReadOnly like style for a Combo Box - c#

I have a textBox set to ReadOnly and I want a similar look for my comboBox so that my User knows that this field can't be edited.
I tried setting Enabled to false but Client doesn't like its result due to poor readability.
textBox.ReadOnly = true; //readable
comboBox.Enabled = false //not readable
My goal is to replicate the style of the ReadOnly textBox into the comboBox's style.

One solution is to render the page based on the field's editability: If it is read only then create a read only textbox with the given value. If it is editable then create a normal combobox. This way only 1 value has to be rendered which may be beneficial for you as well!

The answer is given here:
Just change the DropDownStyle of the ComboBox from DropDown to DropDownList. It works very fine for me.

Related

Right align ComboBox suggestion list when AutoComplete is enabled in WinForms

I'm working on a program and need all text to be right aligned. Everything works except for that DropDownList of suggestions I get when I use the ComboBox - AutoComplete.
I've searched for an answer here already and couldn't find any.
Does anyone know of a way to change the alignment there?
Edit:
my combo box is defined like this:
this.comboBox2.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
this.comboBox2.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
resources.ApplyResources(this.comboBox2, "comboBox2");
this.comboBox2.Name="comboBox2";
this.comboBox2.RightToLeft = System.Windows.Forms.RightToLeft.Yes;
I faced the same and basically the only way I managed to do it is by creating my own custom control; You can simply inherit from textbox and add a listbox to it.

ComboBox with Simple DropDownStyle doesn't show the drop down

I want to use a Combobox, with DropDownStyle=Simple, which changes the list of items when typing some content in the box.
The loading of the items is OK, and I can see them in debugging mode on the Items property, but the dropdown is not shown and seems to be empty.
I also tried to force the display of the dropdown putting
MyComboBox.DroppedDown = True;
Any clue on this behavior?
According to MSDN:
ComboBoxStyle.Simple is the style that
Specifies that the list is always visible and that the text portion is
editable. This means that the user can enter a new value and is not
limited to selecting an existing value in the list.
So if the list is always visible then where is it. It is not visible because of the Size that is set by default. Change the height like so:
MyComboBox.Size = new System.Drawing.Size(256, 150);
The 150 denotes the height in this case. By default the height was something like 21 which was very less. Increase the height to some appropriate figure and the list should be visible.
Also a very important note: Do set the ComboBoxStyle before you set the size. I do not know why but it seems some invalidation or something is amiss here.
So the following would work:
//Will work
MyComboBox.DropDownStyle = ComboBoxStyle.Simple;
MyComboBox.Size = new System.Drawing.Size(256, 150);
but this will not:
//Will not work
MyComboBox.Size = new System.Drawing.Size(256, 150);
MyComboBox.DropDownStyle = ComboBoxStyle.Simple;
The latter might work with some explicit invalidation calls but i did not verify that.
If you want a drop down to open up when the user clicks on the drop down arrow then you would have to use the other combo box styles. In the Simple style the drop down arrow would not appear and the list would always be visible as the MSDN definition suggests.
I would post this as a comment but my reputaion isn't high enough.
How are you populating the ComboBox?
Your problem seems very familiar to:
ComboBox will not update its display list unless you change selections first

.Net Combo Box simple style without edit

How to disable editing or hide text edit field, when DropDownStyle = Simple for Combo Box control?
MSDN on ComboBox.DropDownStyle:
The DropDownStyle property specifies whether the list is always displayed or whether the list is displayed in a drop-down. The DropDownStyle property also specifies whether the text portion can be edited.
Docs on ComboBoxStyle.Simple:
Specifies that the list is always visible and that the text portion is editable. This means that the user can enter a new value and is not limited to selecting an existing value in the list.
So, ComboBoxStyle.Simple suggests that list can be edited by user and it's confusing to disable edit with this DropDownStyle selected. Alternatives:
If you are ok with drop-down list use ComboBoxStyle.DropDownList
If you want to display a non-editable list with a view similar to ComboBoxStyle.Simple consider using ListBox
If you really need to achieve this effect on Combox you can just catch the events like "TextChanged" and then setting it back to "" and asking if (!comboBox1.DropDownStyle == ComboBoxStyle.Simple) before adding items to Items collection. Although it seems there are better ways to achive similar functionality using listbox as suggested before.

Preventing a control changing its Text property while it is not enabled

I have some DomainUpDown controls in my application. The behaviour is set like this:
Normal: Each control can individually goes Up/Down (Change selected item)
Special: If a check box is checked, Up/Downing the first control will cause the other controls to change as well
Now there are some cases that I want some of the controls to be disabled by setting Disabled = true. I did it, but in this case changing the selected item of the first control will cause the other disabled controls to change the selected item as well.
Is there a way to completly disable a control so it does not accepts something like control.Text = "bla bla" ?
P.S: I need not to hide the control!
One way:
You can hold a list of Textbox.Text values, which will hold entries for all of your textboxes.
Upon OnTextChanged:
if your textbox is enabled - update it's text property and store it up in the list.
if your textbox is disabled - set it's text property to the last value you had in your list.
You can use a Dictionary or anything similar that contain KeyValuePair objects.
I'm afraid there's not. At least not without additional work.

Winforms Combobox - do not allow user to edit items

This is probably something simple. The winforms combobox items by default can be edited by the user, how to disable this?
Set DropDownStyle = DropDownList.
Set the ComboBox.DropDownStyle to DropDownList.
ComboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
Specifies that the list is displayed by clicking the down arrow and
that the text portion is not editable. This means that the user cannot
enter a new value. Only values already in the list can be selected.
Set the ComboBox style to ComboBoxStyle.DropDownList
Try setting the DropDownStyle property to DropDownList. Style of Simple makes it like a listbox, Combobox is what you are seeing allowing editing, and DropDownList only allows user to select.
two Method that help you Stop User to not Edit DropDownList:
A. using Programming code:
DropDownListName.DropDownStyle = ComboBoxStyle.DropDownList;\
B. using Design properties of Visual Studio
Set DropDownStyle = DropDownList.
I hope this well help you.

Categories

Resources