[ mish_ns @ 12.03.2010. 12:16 ] @
Pozdrav svima.

Interesuje me kako da napravim pretragu preko comboBoxa, ali da bude naprednija u smislu da se prilikom kucanja karaktera prikazuju svi rezultati u DropDown-u (comboBox DropDownStyle).

Npr.
Ako u combo-u imam sledeće elemente:

Milan
Dragan
Marko
Nenad
Darko

Kada podesim AutoCompleteMode na Suggest i ukucam "N" u dropdown listi dobijam Nenad, ali kada ukucam "rko" ne obijam ništa, a hteo bih da dobijem "Marko","Darko"

Kako to mogu da postignem???

Hvala...
[ 3way @ 12.03.2010. 12:54 ] @
mislim da ces za to morati da napravis neku custom kontrolu...
[ Cola @ 12.03.2010. 14:09 ] @
Ajde pokušaj ovako nekako ovo je brzinsko rešenje pa nije ništa optimizovano

nabaci combo na formu pokušaj ovako doradi pa vrati kod da vidimo šta si dobio

Code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication7
{
  public partial class Form1 : Form
  {
    List<string> _fullList;
    BindingList<string> _autoCompleteList;
    string _autoCompleteText;
    public Form1()
    {
      InitializeComponent();
      _fullList = new List<string>();
      _autoCompleteList = new BindingList<string>();
      _autoCompleteText = "";
      //iniciajlni podaci za primjer
      _fullList.Add("Milan");
      _fullList.Add("Dragan");
      _fullList.Add("Marko");
      _fullList.Add("Nenad");
      _fullList.Add("Darko");
      FillAutoCompleteList();
      comboBox1.DataSource = _autoCompleteList;
      
    }

    private void FillAutoCompleteList()
    {
      _autoCompleteList.Clear();
      foreach (string str in _fullList)
      {
        if (str.Contains(_autoCompleteText))
        {
          _autoCompleteList.Add(str);
        }
      }
    }

    private void comboBox1_KeyUp(object sender, KeyEventArgs e)
    {
      _autoCompleteText = comboBox1.Text;
      int ss = comboBox1.SelectionStart;
      int sl = comboBox1.SelectionLength;
      FillAutoCompleteList();
      comboBox1.DroppedDown = true;
      comboBox1.Text = _autoCompleteText;
      comboBox1.Select(ss, sl);
    }
  }
}


[ mish_ns @ 12.03.2010. 14:46 ] @
E hvala puno...probaću od nedelje, pošto za vikend neću imati vremena, pa kad uradim javljam kako je prošlo...
Ako neko ima još neki predlog nek postuje....
[ mish_ns @ 15.03.2010. 22:08 ] @
Cola legenda si :) Mislim da ce ovo mnogima koristiti...
Odlicno radi.

Jedino me jos interesuje kako da podesim da nema veze koje je slovo ukucano veliko ili malo...
Npr. ukucam malo "m" da dobijem "Milan", "Marko". na ovaj nacin ne dobijam ocekivan rezultat...

E da, zasto kad otkucam nesto u comboBox-u, i pokusam da postavim kursor na formu on "ode" iza forme???(u ovom slucaju)

[ Cola @ 15.03.2010. 22:28 ] @
lako
samo zamjeni da porediš npr oba toupper
Code:

private void FillAutoCompleteList()
    {
      _autoCompleteList.Clear();
      foreach (string str in _fullList)
      {
        if (str.ToUpper().Contains(_autoCompleteText.ToUpper()))
        {
          _autoCompleteList.Add(str);
        }
      }
    }
[ Cola @ 15.03.2010. 22:32 ] @
Što se tiče kursora ne znam ni ja i ja sam to primjetio
valda neko ima bolje rešenje
ovo mi je bilo brzinsko
vidiš da na promjenu slova presipam iz šupljeg u prazno (očito da ovo ne valja može bolje)
[ AMD guy @ 16.03.2010. 16:59 ] @
Citat:
Cola: lako
samo zamjeni da porediš npr oba toupper
Code (csharp):

private void FillAutoCompleteList()
    {
      _autoCompleteList.Clear();
      foreach (string str in _fullList)
      {
        if (str.ToUpper().Contains(_autoCompleteText.ToUpper()))
        {
          _autoCompleteList.Add(str);
        }
      }
    }
 



Ako se postavi ToUpper metoda onda se svako slovo postavlja na veliko, javlja se problem, sada ako se kod stringa "Milan" unese il to postaje IL i ime se ne prikazuje u combobox-u.

Inace dobar program.
[ Cola @ 16.03.2010. 17:07 ] @
Mislim da nisi upravu

ja samo poredim sa ToUpper

Code:

if (str.ToUpper().Contains(_autoCompleteText.ToUpper()))
{
          _autoCompleteList.Add(str);
}


primjeti da ja nigdje i nikom ToUpper nisam pridružio. Promjenljiva str i _autoCompleteText i dalje zadržavaju svoje vrijednosti. Ja sam ih samo poredio ToUpper a kanije dodajem u listu onakvu vrednost kakva je i bila!
[ AMD guy @ 16.03.2010. 17:51 ] @
Znaci ako mi stoji ToUpper() onda "il" iz "Milan" mi se ne prikazuje, ali ako je bez ToUpper radi(prikazuje mi)
[ Cola @ 16.03.2010. 18:11 ] @
Pa pazi ToUpper ne mijenja stanje promjenljive nadam se da je to jasno

ToUpper mi koristi samo da bi uporedio vrijednosti

u _fullList iz koje kupim stingove u promjenljivu str stoje sledeće vrijednosti (ove pod navodnicima)
_fullList.Add("Milan");
_fullList.Add("Dragan");
_fullList.Add("Marko");
_fullList.Add("Nenad");
_fullList.Add("Darko");
kada sa foreach kupi svaki pojedninačno ja dobijam baš te vrijednosti

u combo kada ukucaš 'il' program ne mijenjam vrijednost toga što je ukucano!
On samo radi upoređivanja digne vrijednosti ToUpper ali vrijesnost u promjenljivama i dalje ostaju onakve kakve su bile u konkretnom slučaju koji si naveo

_autoCompleteText = 'il' ali je _autoCompleteText.ToUpper() je 'IL'
dok je u promjenljivoj str vrijednost jedan iz liste npr. 'Milan' ali je str.ToUpper() je 'MILAN' a 'MILAN'. Contains('IL') je true pa se u _autoCompleteList doaje vrijednost promjenljiva str a ona je kao što sam gore napiso jedna (originalna, neizmjenjena) iz originalne liste dakle 'Milan' a ne 'Milan' ili 'milan'

ne kontam šta je nejasno
[ AMD guy @ 16.03.2010. 18:25 ] @
Znaci ne moze da ne bude Case-sensitive string koji se unosi?
[ Cola @ 16.03.2010. 18:33 ] @
Pa koji god da string uneseš ono će ga porediti kao velika slova
čini mi se da je mish_ns to hteo.
[ mish_ns @ 16.03.2010. 19:01 ] @
Ja sam hteo da bude case sensitive...znaci kad ukucam "m" da izbaci "Milan","Marko" recimo.
ali isto tako kada ukucam "R" da dobijem recimo "Darko"...
Tj. kao sto je rekao AMD da ne bude case sensitive...

Moguce da sam ja lose objasnio...
[ Cola @ 16.03.2010. 19:17 ] @
Da tako i radi sa ToUpper ako se to ne želi onda ne treba koristiti takvo upoređivanje

Nešto ne štima u mojoj definiciji case sensitive ili u vašoj.

kada je nešto case sensitive onda je osetljivo na mala i velika i u tom slušaju 'm' nije isto što i 'M'
dok je case insensitive jeste tako ja tumačim ispravite me ako griješim.
hvala
wiki Case sensitivity
[ mish_ns @ 16.03.2010. 19:48 ] @
ok...mi smo rekli da "ne bude" case sensitive...to je po tvojoj definiciji case insensitive koliko ja razumem...
nebitno mislim da smo se sad nasli :)
[ AMD guy @ 16.03.2010. 19:51 ] @
Jeste
[ Cola @ 28.11.2016. 11:52 ] @
Prošlo je 100god i meni zatreba ovaj kod pa da ga iskoristim i da dopišem problem kursora možete da riješite kao na ovom
linku.

portrebno je samo ispod
Code:
comboBox1.DroppedDown = true;

dodati
Code:

Cursor.Current = Cursors.Default;
[ djordjeno @ 29.11.2016. 09:30 ] @
Generalno je ok resenje.
Mada mislim da, oni koji imaju potrebe da osnovne win forms kontrole nabudze sa svim feature-ima (poput ovog iznad), treba da razmisle o kupovini 3rd party kontrola.
Necu preporucivati konkretan proizvod, ali na trzistu postoje 3-4 ozbiljne firme koje se samo time bave.

Ja sam odvojio vreme i naucio jedan i mogu vam reci da je dosta lakse kad sve imas na dohvat ruke i samo podesis propertije..
Takodje primetio sam se da kad imas sve kontrole koje su ti potrebne, vise vremena se posvetis resavanju domenskog problema, a ne to kako ce biti obojen red u gridu koji ima vrednost kolne X izmedju 0 i 10 npr..

Ko ima projekte kome nije toliko bitan korisnicki UI, neka preskoci kupovinu.