Удалить границу из выпадающего списка - PullRequest
5 голосов
/ 14 апреля 2009

Я работаю над формой в C #, которая используется для отображения информации, но мне все еще нужно разрешить некоторые манипуляции с информацией. Что я действительно хочу сделать, так это удалить границу из выпадающего списка, это позволило бы мне отобразить информацию, а также позволить пользователю выбирать другие элементы в наборе, не отображая их все.

Если говорить точнее, у меня есть список из 4 или 5 адресов электронной почты, но я хочу отображать только один, одновременно предоставляя пользователю возможность легко выбрать другой элемент. Я искал по всему, но не могу найти простой способ изменить границу комбинированного списка, и этот комбобокс меньше подходит для моих нужд.

Я только начал с C #, поэтому я все еще учусь, может быть, я что-то упустил. Похоже, это должно быть намного проще, чем может быть, надеюсь, кто-нибудь может мне помочь.

EDIT:
Форма использует метки для отображения информации, поэтому наличие в середине поля со списком делает его ужасным. По сути, я ищу ссылку, которая при нажатии открывает почтовую программу по умолчанию и заполняет адрес, но мне нужна выпадающая кнопка, чтобы можно было выбрать альтернативный адрес. Я не хочу отображать огромный список адресов, если мне не нужно, я просто хочу отображать по одному. Как комбо-бокс, но без рамки.

Возможно, я мог бы просто добавить кнопку, которая отображает список альтернативных адресов, но зачем изобретать велосипед заново, если я могу просто удалить границу из комбинированного списка и получить именно то, что я ищу? Спасибо

Ответы [ 2 ]

3 голосов
/ 14 апреля 2009

Возможно, вам вообще не нужен ComboBox. Предполагая, что вы используете Windows Forms, вы можете использовать стандартный TextBox и добавить свой список адресов электронной почты в его AutoCompleteCustomSource (и установить для AutoCompleteSource значение «CustomSource»).

Затем, если вы установите AutoCompleteMode в TextBox на «Добавить», пользователь никогда не увидит полный список адресов электронной почты - он просто получит закрывающее совпадение, заполненное в TextBox при вводе. С небольшим запасом кода вы даже сможете представить возможность циклически перемещаться по доступным элементам с помощью клавиш со стрелками вверх и вниз.

Редактировать

Теперь, когда вы обновили свой вопрос, я предложу совершенно другой подход.

Добавьте адрес электронной почты по умолчанию в качестве стандартной метки. Черт возьми - добавь его как LinkLabel и сделай его кликабельным, чтобы он вел себя как ссылка mailto: на веб-странице. Рядом с этим ярлыком добавьте обычную кнопку. Установите для его свойства FlatStyle значение «System», для имени шрифта - «Marlett», а для заголовка - «u», чтобы оно выглядело как «выпадающая кнопка».

Теперь добавьте ContextMenuStrip к вашей форме и добавьте пункт меню для каждого адреса электронной почты. Вы можете сделать это в коде довольно легко.

Теперь добавьте этот обработчик события Click для вашей кнопки:

private void button1_Click(object sender, EventArgs e)
{
    contextMenuStrip1.Show(button1, new Point(0, button1.Height));
}

Таким образом, при нажатии кнопки появляется всплывающее меню с «альтернативными» адресами электронной почты. Все, что вам нужно сделать, это перехватить событие Click пунктов меню, чтобы «использовать» выбранный адрес электронной почты.

1 голос
/ 14 апреля 2009

Зачем вам нужен ComboBox, чтобы быть без полей? Не имеет особого смысла для меня.

Сделать, что вы можете сделать, это сделать только для чтения ComboBox. Вы можете заполнить записи, и пользователю будет разрешено выбирать их, но не вводить текст.

Просто установите DropDownStyle на ComboBoxStyle.DropDownList.

this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;

Обновление:

Вы можете попробовать "скрыть" границу, установив DrawMode в DrawMode.OwnerDrawFixed.

this.comboBox1.DrawMode = DrawMode.OwnerDrawFixed;

Это не скрывает это, но делает его менее видимым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...