Telerik 下拉控件不允许我从下拉列表中选择 select 项
Telerik dropdown control not allowing me to select item from dropdown list
我创建了一个带有 4 个控件(一个按钮、2 个下拉列表和一个文本框)的 Telerik 测试应用程序。
我想要做的是,在点击 "Add project" 按钮时,会显示第一个下拉列表(来自 PopulateProjects() 方法的项目列表)。 select 从该列表中选择项目时,将显示下一个带有 "project tasks from PopulateTasks() method" 的下拉列表。
在 select 执行任务时,文本框控件显示项目和任务的文本内容 selected(TextDisplay() 方法)。
我面临的问题是,下拉控件不会等待我 select 一个项目,而是自动 select 将列表中的第一个项目作为默认值。因此文本框显示项目列表和项目任务中的第一项,即显示 "PROJECT abc TASK task one" 。
我什至无法查看下拉列表中的项目,但我可以在调试时看到这些项目存在。
流程从 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()。
感谢任何想法或帮助!
虽然我找到了您的明确调用,但我以前并没有经常使用 WinForms
radTaskList.Select();
有点奇怪。
我建议删除它并只处理所选项目的文本。
你试过在radProjList_SelectedIndexChanged方法的入口调试加断点吗?
我建议在用数据填充控件时取消订阅 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;
}
希望对您有所帮助。
我创建了一个带有 4 个控件(一个按钮、2 个下拉列表和一个文本框)的 Telerik 测试应用程序。
我想要做的是,在点击 "Add project" 按钮时,会显示第一个下拉列表(来自 PopulateProjects() 方法的项目列表)。 select 从该列表中选择项目时,将显示下一个带有 "project tasks from PopulateTasks() method" 的下拉列表。 在 select 执行任务时,文本框控件显示项目和任务的文本内容 selected(TextDisplay() 方法)。
我面临的问题是,下拉控件不会等待我 select 一个项目,而是自动 select 将列表中的第一个项目作为默认值。因此文本框显示项目列表和项目任务中的第一项,即显示 "PROJECT abc TASK task one" 。 我什至无法查看下拉列表中的项目,但我可以在调试时看到这些项目存在。 流程从 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()。
感谢任何想法或帮助!
虽然我找到了您的明确调用,但我以前并没有经常使用 WinForms
radTaskList.Select();
有点奇怪。
我建议删除它并只处理所选项目的文本。 你试过在radProjList_SelectedIndexChanged方法的入口调试加断点吗?
我建议在用数据填充控件时取消订阅 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;
}
希望对您有所帮助。