Выпадающий элемент управления Telerik не позволяет мне выбрать элемент из раскрывающегося списка
Я создал приложение Telerik Test с 4 элементами управления (кнопка, 2 раскрывающихся списка и текстовое поле).
Я пытаюсь сделать следующее: при нажатии кнопки "Добавить проект" отображается первый раскрывающийся список (список проектов из метода PopulateProjects()). При выборе проекта из этого списка отображается следующий раскрывающийся список с "задачами проекта из метода PopulateTasks()" . При выборе задачи элемент управления текстовым полем отображает текстовое содержимое как проекта, так и выбранной задачи (метод TextDisplay()).
Проблема, с которой я сталкиваюсь, заключается в том, что раскрывающиеся элементы управления не ждут, пока я выберу элемент, вместо этого он просто автоматически выбирает первый элемент в списке по умолчанию. Таким образом, в текстовом поле отображается первый элемент в списке проектов и задача проекта, т.е. отображается "ПРОЕКТ abc ЗАДАЧА первая" . Я не могу даже просмотреть элементы в раскрывающемся списке, но при отладке вижу, что элементы существуют. Поток идет от radProjList.EndUpdate непосредственно к selectedIndexChanged. Событие запускается, хотя индекс не изменился. Выпадающий список даже не отображается.
namespace test
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnAddProject_Click(object sender, EventArgs e)
{
radProjList.Visible = true;
radTaskList.Visible = false;
PopulateProjects();
radTaskList.Visible = false;
radProjList.Visible = false;
}
public string NoteText
{
get
{
//return txtNote.Text;
return radTextBox.Text;
}
set
{
//txtNote.Text = value;
radTextBox.Text = value;
}
}
void TextDisplay()
{
string projname = radProjList.SelectedText;
string projtask = radTaskList.SelectedText;
this.radTextBox.Text = "PROJECT "+projname + " TASK " + projtask;
radTaskList.Visible = false;
radProjList.Visible = false;
}
void PopulateProjects()
{
radProjList.Visible = true;
radTaskList.Visible = false;
radProjList.Items.Clear();
radProjList.Text = "Select Project";
List<string> ProjectName = new List<string>();
ProjectName.Add("abc");
ProjectName.Add("def");
ProjectName.Add("ghi");
ProjectName.Add("jkl");
ProjectName.Add("mno");
ProjectName.Add("pqr");
radProjList.BeginUpdate();
radProjList.DataSource = ProjectName;
radProjList.DisplayMember = "ProjectName";
radProjList.ValueMember = "ProjectName";
radProjList.AutoCompleteDataSource = ProjectName;
radProjList.DropDownListElement.AutoCompleteSuggest.SuggestMode = Telerik.WinControls.UI.SuggestMode.Contains;
Size popupSize = new Size(400, 300);
radProjList.DropDownListElement.AutoCompleteSuggest.DropDownList.DropDownMinSize = popupSize;
radProjList.DropDownListElement.DropDownMinSize = popupSize;
radProjList.ListElement.Font = new Font("Microsoft Sans Serif", 16);
radProjList.DropDownListElement.AutoCompleteSuggest.DropDownList.Popup.Font = new System.Drawing.Font("Microsoft Sans Serif", 16);
radProjList.EndUpdate();
radProjList.SelectedIndex = -1;
radProjList.Text = "Select Project";
}
void PopulateTasks()
{
List<string> populateTaskList = new List<string>();
radTaskList.Visible = true;
radTaskList.Items.Clear();
populateTaskList.Add("task one");
populateTaskList.Add("task two");
populateTaskList.Add("task three");
populateTaskList.Add("task four");
populateTaskList.Add("task five");
populateTaskList.Add("task six");
radTaskList.Items.Clear();
radTaskList.Text = "Select Tasks";
radTaskList.BeginUpdate();
radTaskList.DataSource = populateTaskList;
radTaskList.DisplayMember = "projectTask";
radTaskList.ValueMember = "projectTask";
radTaskList.AutoCompleteDataSource = populateTaskList;
radTaskList.AutoCompleteMode = AutoCompleteMode.Suggest;
Size popupSize = new Size(400, 300);
radTaskList.DropDownListElement.AutoCompleteSuggest.DropDownList.DropDownMinSize = popupSize;
radTaskList.DropDownListElement.DropDownMinSize = popupSize;
radTaskList.DropDownListElement.AutoCompleteSuggest.DropDownList.ListElement.VisualItemFormatting += new Telerik.WinControls.UI.VisualListItemFormattingEventHandler(ListElement_VisualItemFormatting);
radTaskList.ListElement.Font = new Font("Microsoft Sans Serif", 16);
radProjList.DropDownListElement.AutoCompleteSuggest.DropDownList.Popup.Font = new System.Drawing.Font("Microsoft Sans Serif", 26);
radTaskList.EndUpdate();
radTaskList.SelectedIndex = -1;
radTaskList.Text = "Select Project Type";
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void radProjList_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
{
if (radProjList.SelectedIndex >= 0)
{
radTaskList.Select();
PopulateTasks();
}
}
private void radTaskList_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
{
if (radTaskList.SelectedIndex >= 0)
{
radTaskList.CloseDropDown();
TextDisplay();
}
}
Font myFont = new Font("Microsoft Sans Serif", 16);
private void ListElement_VisualItemFormatting(object sender, Telerik.WinControls.UI.VisualItemFormattingEventArgs args)
{
args.VisualItem.Font = myFont;
}
private void radTextBox_TextChanged(object sender, EventArgs e)
{
}
}
}
Я не добавлял код в InitializeComponents().
Любые мысли или помощь приветствуются!
2 ответа
Я бы предложил отказаться от подписки на событие SelectedIndexChanged при заполнении элементов управления данными. Вы можете подписаться снова, когда все будет инициализировано. Вот код:
void PopulateProjects()
{
radProjList.SelectedIndexChanged -= radProjList_SelectedIndexChanged;
radProjList.Visible = true;
radTaskList.Visible = false;
radProjList.Items.Clear();
radProjList.Text = "Select Project";
List<string> ProjectName = new List<string>();
ProjectName.Add("abc");
ProjectName.Add("def");
ProjectName.Add("ghi");
ProjectName.Add("jkl");
ProjectName.Add("mno");
ProjectName.Add("pqr");
radProjList.DataSource = ProjectName;
radProjList.DisplayMember = "ProjectName";
radProjList.ValueMember = "ProjectName";
radProjList.AutoCompleteDataSource = ProjectName;
Size popupSize = new Size(400, 300);
radProjList.DropDownListElement.DropDownMinSize = popupSize;
radProjList.ListElement.Font = new Font("Microsoft Sans Serif", 16);
radProjList.SelectedIndex = -1;
radProjList.Text = "Select Project";
radProjList.SelectedIndexChanged += radProjList_SelectedIndexChanged;
}
void PopulateTasks()
{
radTaskList.SelectedIndexChanged -= radTaskList_SelectedIndexChanged;
List<string> populateTaskList = new List<string>();
radTaskList.Visible = true;
radTaskList.Items.Clear();
populateTaskList.Add("task one");
populateTaskList.Add("task two");
populateTaskList.Add("task three");
populateTaskList.Add("task four");
populateTaskList.Add("task five");
populateTaskList.Add("task six");
radTaskList.Items.Clear();
radTaskList.Text = "Select Tasks";
radTaskList.DataSource = populateTaskList;
radTaskList.DisplayMember = "projectTask";
radTaskList.ValueMember = "projectTask";
radTaskList.AutoCompleteDataSource = populateTaskList;
radTaskList.AutoCompleteMode = AutoCompleteMode.Suggest;
Size popupSize = new Size(400, 300);
radTaskList.DropDownListElement.AutoCompleteSuggest.DropDownList.DropDownMinSize = popupSize;
radTaskList.DropDownListElement.DropDownMinSize = popupSize;
radTaskList.DropDownListElement.AutoCompleteSuggest.DropDownList.ListElement.VisualItemFormatting += new Telerik.WinControls.UI.VisualListItemFormattingEventHandler(ListElement_VisualItemFormatting);
radTaskList.ListElement.Font = new Font("Microsoft Sans Serif", 16);
radTaskList.SelectedIndex = -1;
radTaskList.Text = "Select Project Type";
radTaskList.SelectedIndexChanged += radTaskList_SelectedIndexChanged;
}
Надеюсь, это поможет.
Раньше я мало работал с WinForms, хотя нахожу ваш явный вызов
radTaskList.Select();
немного странно.
Я бы предложил удалить это и обрабатывать только текст выбранного элемента. Вы пробовали отлаживать и добавлять точку останова в записи метода radProjList_SelectedIndexChanged?