none
Динамическое заполнение выпадающего списка TextBox RRS feed

  • Вопрос

  • Подскажите пожалуйста. Кто как реализует динамическое изменение TextBox.AutoComleteCustomSource, во время события TextChanged.
    Дело в том, что при изменении этого списка во время ввода текста, программа вылетает AccessViolationException.
    Я пока реализовал так:
    private void sourceCityTextBox_TextChanged(object sender, EventArgs e)
    {
    	if (char.ToUpper(sourceCityTextBox.Text[0]) != _cityFirstChar)
    	{
    		sourceCityTextBox.AutoCompleteSource = AutoCompleteSource.None;
    		AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
    		AddressSearch.citySearch(sourceCityTextBox.Text, namesCollection);
    		sourceCityTextBox.AutoCompleteCustomSource = namesCollection;
    		sourceCityTextBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    		_cityFirstChar = char.ToUpper(sourceCityTextBox.Text[0]);
    	}
    }
    но во время ввода тескста ошибки все равно возникают.
    На других форумах, тоже есть обсуждения этой проблемы. Но рабочего решения, я так и не нашел.
    • Перемещено Siddharth Chavan 1 октября 2010 г. 21:36 MSDN Forums Consolidation (От:Visual C#)
    18 марта 2010 г. 14:21

Все ответы

  • Подскажите пожалуйста. Кто как реализует динамическое изменение TextBox.AutoComleteCustomSource, во время события TextChanged.
    Дело в том, что при изменении этого списка во время ввода текста, программа вылетает AccessViolationException.
    Я пока реализовал так:
    private void sourceCityTextBox_TextChanged(object sender, EventArgs e)
    
    {
    
    	if (char.ToUpper(sourceCityTextBox.Text[0]) != _cityFirstChar)
    
    	{
    
    		sourceCityTextBox.AutoCompleteSource = AutoCompleteSource.None;
    
    		AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
    
    		AddressSearch.citySearch(sourceCityTextBox.Text, namesCollection);
    
    		sourceCityTextBox.AutoCompleteCustomSource = namesCollection;
    
    		sourceCityTextBox.AutoCompleteSource = AutoCompleteSource.CustomSource;
    
    		_cityFirstChar = char.ToUpper(sourceCityTextBox.Text[0]);
    
    	}
    
    }
    но во время ввода тескста ошибки все равно возникают.
    На других форумах, тоже есть обсуждения этой проблемы. Но рабочего решения, я так и не нашел.

    public Form1()
            {
                InitializeComponent();
    
                textBox1.AutoCompleteSource = AutoCompleteSource.CustomSource;
                textBox1.AutoCompleteMode = AutoCompleteMode.Suggest;
    
            }
    
    private void textBox1_TextChanged(object sender, EventArgs e)
            {           
                
                AutoCompleteStringCollection namesCollection = new AutoCompleteStringCollection();
    
                namesCollection.Add("супер");
                namesCollection.Add("супа");
                namesCollection.Add("суп");
                textBox1.AutoCompleteCustomSource = namesCollection;
            }
    
    • Помечено в качестве ответа I.Vorontsov 22 марта 2010 г. 8:27
    • Снята пометка об ответе bobik11 24 марта 2010 г. 23:21
    19 марта 2010 г. 14:45
  • В том то и дело, что в таком варианте очень часто при наборе текста возникает ошибка: Доступ к ликвидированному объекту невозможен.

    Я не случайно пытался сделать:

    sourceCityTextBox.AutoCompleteSource = AutoCompleteSource.None;
    sourceCityTextBox.AutoCompleteSource = AutoCompleteSource.CustomSource;

    Вот trace во время ошибки:

    Trace:    в System.Windows.Forms.Control.CreateHandle()
       в System.Windows.Forms.Form.CreateHandle()
       в System.Windows.Forms.Control.get_Handle()
       в System.Windows.Forms.Control.SetVisibleCore(Boolean value)
       в System.Windows.Forms.Form.SetVisibleCore(Boolean value)
       в System.Windows.Forms.Control.set_Visible(Boolean value)
       в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       в System.Windows.Forms.Application.Run(Form mainForm)
       в TaxiClient.Program.Main() в E:\develop\c#\Client\Client\Program.cs:строка 33
       в System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       в System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       в System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       в System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       в System.Threading.ThreadHelper.ThreadStart()

    24 марта 2010 г. 23:21