Выпадающий контроль Telerik не позволяет мне выбрать элемент из выпадающего списка - PullRequest
0 голосов
/ 23 сентября 2019

Я создал приложение Telerik Test с 4 элементами управления (кнопка, 2 раскрывающихся списка и текстовое поле).

Я пытаюсь нажать кнопку «Добавить проект».отображается первый раскрывающийся список (список проектов из метода 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 ().

Любые мысли или помощь приветствуются!

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Я бы предложил отписаться от события 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;

}

Надеюсь, это поможет.

0 голосов
/ 23 сентября 2019

Раньше я мало работал с WinForms, хотя я нахожу ваш явный вызов

radTaskList.Select(); 

немного странным.

Я бы предложил удалить это и обрабатывать только текст выбранного элемента.Вы пробовали отладку и добавление точки останова в запись метода radProjList_SelectedIndexChanged?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...