Перейти к содержимому

Как добавить в listbox c текст

  • автор:

Как добавить в listbox c текст

Элемент ListBox представляет собой простой список. Ключевым свойством этого элемента является свойство Items , которое как раз и хранит набор всех элементов списка.

Элементы в список могут добавляться как во время разработки, так и программным способом. В Visual Studio в окне Properties (Свойства) для элемента ListBox мы можем найти свойство Items. После двойного щелчка на свойство нам отобразится окно для добавления элементов в список:

Добавление объектов в элемент ListBox

В пустое поле мы вводим по одному элементу списка — по одному на каждой строке. После этого все добавленные нами элементы окажутся в списке, и мы сможем ими управлять:

Элемент ListBox в Windows Forms

Программное управление элементами в ListBox

Добавление элементов

Итак, все элементы списка входят в свойство Items , которое представляет собой коллекцию. Для добавления нового элемента в эту коллекцию, а значит и в список, надо использовать метод Add, например: listBox1.Items.Add(«Новый элемент»); . При использовании этого метода каждый добавляемый элемент добавляется в конец списка.

Можно добавить сразу несколько элементов, например, массив. Для этого используется метод AddRange :

string[] countries = < "Бразилия", "Аргентина", "Чили", "Уругвай", "Колумбия" >; listBox1.Items.AddRange(countries);
Вставка элементов

В отличие от простого добавления вставка производится по определенному индексу списка с помощью метода Insert :

listBox1.Items.Insert(1, "Парагвай");

В данном случае вставляем элемент на вторую позицию в списке, так как отсчет позиций начинается с нуля.

Удаление элементов

Для удаления элемента по его тексту используется метод Remove :

listBox1.Items.Remove("Чили");

Чтобы удалить элемент по его индексу в списке, используется метод RemoveAt :

listBox1.Items.RemoveAt(1);

Кроме того, можно очистить сразу весь список, применив метод Clear :

listBox1.Items.Clear();
Доступ к элементам списка

Используя индекс элемента, можно сам элемент в списке. Например, получим первый элемент списка:

string firstElement = listBox1.Items[0];

Свойство Count возвращает количество элементов в списке:

int number = listBox1.Items.Count;
Выделение элементов списка

При выделении элементов списка мы можем ими управлять как через индекс, так и через сам выделенный элемент. Получить выделенные элементы можно с помощью следующих свойств элемента ListBox:

  • SelectedIndex : возвращает или устанавливает номер выделенного элемента списка. Если выделенные элементы отсутствуют, тогда свойство имеет значение -1
  • SelectedIndices : возвращает или устанавливает коллекцию выделенных элементов в виде набора их индексов
  • SelectedItem: возвращает или устанавливает текст выделенного элемента
  • SelectedItems : возвращает или устанавливает выделенные элементы в виде коллекции

По умолчанию список поддерживает выделение одного элемента. Чтобы добавить возможность выделения нескольких элементов, надо установить у его свойства SelectionMode значение MultiSimple .

Чтобы выделить элемент програмно, надо применить метод SetSelected(int index, bool value) , где index — номер выделенного элемента. Если второй параметр — value имеет значение true , то элемент по указанному индексу выделяется, если false , то выделение наоборот скрывается:

listBox1.SetSelected(2, true); // будет выделен третий элемент

Чтобы снять выделение со всех выделенных элементов, используется метод ClearSelected .

Событие SelectedIndexChanged

Из всех событий элемента ListBox надо отметить в первую очередь событие SelectedIndexChanged , которое возникает при изменении выделенного элемента:

public partial class Form1 : Form < public Form1() < InitializeComponent(); string[] countries = < "Бразилия", "Аргентина", "Чили", "Уругвай", "Колумбия" >; listBox1.Items.AddRange(countries); listBox1.SelectedIndexChanged += listBox1_SelectedIndexChanged; > void listBox1_SelectedIndexChanged(object sender, EventArgs e) < string selectedCountry = listBox1.SelectedItem.ToString(); MessageBox.Show(selectedCountry); >>

В данном случае по выбору элемента списка будет отображаться сообщение с выделенным элементом.

List Box. Text Свойство

Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.

Получает или выполняет поиск текста позиции, выбранной в настоящий момент в элементе управления ListBox, или выполняет поиск этого текста.

public: virtual property System::String ^ Text < System::String ^ get(); void set(System::String ^ value); >;
[System.ComponentModel.Bindable(false)] [System.ComponentModel.Browsable(false)] public override string Text
[] [] member this.Text : string with get, set
Public Overrides Property Text As String
Значение свойства

Текст текущей выделенной позиции в элементе управления.

Комментарии

Если для этого свойства задано строковое значение, ListBox выполняется поиск элемента в объекте ListBox , который соответствует указанному тексту, и выбирается элемент. Это свойство также можно использовать, чтобы определить, какие элементы в данный момент выбраны ListBoxв . SelectionMode Если свойство ListBox объекта имеет значение SelectionMode.MultiExtended , это свойство возвращает текст первого выбранного элемента. SelectionMode Если свойство ListBox объекта не имеет значения SelectionMode.None , это свойство возвращает текст первого выбранного элемента.

как сделать поиск по listBox C#

В listBox много строк, которые ссылаются на разные userControl. Нужно сделать сверху поле, куда вводить текст и если этот текст присутствует в listBox то его находит если же несколько, то находит несколько.
Проблема в том, что я не знаю как это сделать. Поиск лучше всего сделать что бы он удалял все лишние строки а при вводе другого слова или удалении снова появлялись. вообщем я не знаю как сделать да еще и что бы порядок открытия userControl сохранился.
Буду благодарен за помощь.

Еще хотел спросить возможно ли создать сразу определенное количество userControl. А то 200 раз его добавлять из меню не в кайф.

как добавить текст из textbox Form2(дочерняя форма) в listbox главной формы.

1) Имеются 2 формы — Form1 и Form2, на Form1 располагаются Button (button1, будет открывать вторую форму) и Label (label1, здесь будем менять текст). На Form2 — button1, по нажатию на которую будет происходить смена текста в label1.
2) Так как нам из первой формы нужно иметь доступ ко второй, а из второй к первой, то будет возникать проблема перекрестных ссылок (когда Form1.h ссылается на Form2.h, который в свою очередь опять ссылается на Form1.h). Для того, чтобы этого избежать, код первой формы (Form1), который будет иметь доступ ко второй форме (Form2) мы вынесем из h-файла в cpp файл.
Таким образом нужно создать файл Form1.cpp. (source files-> правая кнопка->создать)
3) Объявить открытый метод Set в Form1.h для того, чтобы можно было изменить текст label1:
Код C++

public: void Set(String^ text)
label1->Text = text;
>
4) В файле Form2.h подключаем Form1.h:
Код C++
1
#include «Form1.h»
и создаем конструктор, который будет принимать и сохранять ссылку на первую форму для дальнейшего использования:
Код C++

Form2(Form1^ parent)
InitializeComponent();
parentForm = parent;
>
//.
Код C++

private: Form1^ parentForm;
По клику кнопки, будем вызывать метод Set родительской формы:
Код C++

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) parentForm->Set(«hello from form2»);
>
5) Осталось в первой форме сделать открытие второй формы. Для этого из Form1.h обработчик нажатия кнопки переносим в Form1.cpp, а в h-файле оставляем только его объявление:
Form1.cpp:
Код C++

#include «StdAfx.h»
#include «Form1.h»
#include «Form2.h»
namespace testApp System::Void Form1::button1_Click(System::Object^ sender, System::EventArgs^ e) Form2^ f2 = gcnew Form2(this);
f2->Show();
this->Hide();
>
>

В Form1.h (#include «Form2.h» там не нужен, — не будет работать) вставляем только:
Код C++
1
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e);
На этом все. Можно скомпилировать и проверить проект.

// Lab1.cpp: главный файл проекта.

#include «stdafx.h»
#include «Form1.h»
#include «Form2.h»
namespace testApp System::Void button5_Click(System::Object^ sender, System::EventArgs^ e) Form2^ f2 = gcnew Form2();
f2->Show();
>
>

using namespace Lab1;

[STAThreadAttribute]
int main(array ^args)
// Включение визуальных эффектов Windows XP до создания каких-либо элементов управления
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

// Создание главного окна и его запуск
Application::Run(gcnew Form1());
return 0;
>

добавила в Form1.h

private: System::Void button5_Click(System::Object^ sender, System::EventArgs^ e);
public: void Set(String^ text)
listBox1->Items->Add(text);
>

добавила в Form2.h

public :
Form2 ( Form1 ^ parent )

InitializeComponent ( ) ;
parentForm = parent ;
>

private :
///
/// Требуется переменная конструктора.
Form1 ^ parentForm ;

public : System :: Void button1_Click ( System :: Object ^ sender, System :: EventArgs ^ e ) <
parentForm — > Set ( textBox1 — > Text ) ;
>

запускаю и:
1>—— Построение начато: проект: Lab1, Конфигурация: Debug Win32 ——
1> Form2.cpp
1> Lab1.cpp
1>Lab1.cpp(8): error C2065: Form2: необъявленный идентификатор
1>Lab1.cpp(8): error C2065: f2: необъявленный идентификатор
1>Lab1.cpp(8): error C2061: синтаксическая ошибка: идентификатор «Form2»
1>Lab1.cpp(9): error C2065: f2: необъявленный идентификатор
1>Lab1.cpp(9): error C2227: выражение слева от «->Show» должно указывать на тип класса, структуры или объединения либо на универсальный тип
1> тип: ‘unknown-type’

помогите разобраться, пожалуйста в Builder C++ очень легко это сделать, а вот в Visual C++ не пойму как.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *