【问题标题】:Telerik dropdown control not allowing me to select item from dropdown listTelerik 下拉控件不允许我从下拉列表中选择项目
【发布时间】:2020-01-23 21:00:27
【问题描述】:

我创建了一个带有 4 个控件(一个按钮、2 个下拉列表和一个文本框)的 Telerik Test 应用程序。

我想要做的是,在点击“添加项目”按钮时,会显示第一个下拉列表(来自 PopulateProjects() 方法的项目列表)。从该列表中选择项目后,将显示下一个下拉列表,其中包含“来自 PopulateTasks() 方法的项目任务”。 在选择一个任务时,文本框控件显示项目和所选任务的文本内容(TextDisplay() 方法)。

我面临的问题是,下拉控件不会等待我选择一个项目,而是默认自动选择列表中的第一个项目。因此,文本框显示项目列表和项目任务中的第一项,即显示“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()。

任何想法或帮助表示赞赏!

【问题讨论】:

    标签: c# winforms telerik raddropdownbutton


    【解决方案1】:

    我建议在使用数据填充控件时取消订阅 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;
    
    }
    

    我希望这会有所帮助。

    【讨论】:

    • 我试过这个,由于某种原因我的下拉列表本身没有显示出来。所以我无法选择任何项目。知道为什么吗?
    • 没关系,我在原始代码中试过这个并且它有效(需要弄清楚为什么它在测试应用程序中不起作用)。非常感谢!
    【解决方案2】:

    我以前没有经常使用 WinForms,虽然我发现你的明确调用

    radTaskList.Select(); 
    

    有点奇怪。

    我建议删除它并只处理所选项目的文本。 有没有试过在 radProjList_SelectedIndexChanged 方法的入口调试和添加断点?

    【讨论】:

    • 我尝试删除它,仍然无法正常工作。我尝试调试它,由于某种原因,radProjList.SelectedIndex 值等于 0。这就是我认为它采用第一项的原因。我不知道为什么它把它当作 0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多