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;

}

希望对您有所帮助。