Diskuze: dynamická aktualizace comboboxu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj, pokud to chceš aktualizovat pravidelně, přidej si timer, kde si nastavíš interval, který znovu zavolá metodu pro získání portů.
Ahoj Jardo
Souhlasím, tenhle způsob jsem vyzkoušel. Je třeba trošku poupravit kód ale
i pak je problém. Maže se vybraný port a při otevřeném comboboxu a
vybírání portu pomocí myši se ,,odznačuje,, právě vybraná položka.
viz. https://www.youtube.com/watch?…
private void timer1_Tick(object sender, EventArgs e)
{
comboBox1.Items.Clear();
ports = SerialPort.GetPortNames();
Array.Sort(ports);
foreach (string port in ports)
{
comboBox1.Items.Add(port);
Console.WriteLine(port);
}
}
Mám k dispozici pole portů, které získávam přes timer. Nejlepší by podle mě bylo porovnat, jestli se načtené porty v poli shodují s porty v comboboxu. Pokud by se neshodovaly, odebral by se port z comboboxu, který už v poli není a případně se nahradil jiným, který v poli je. Jak by šlo tohle provést, existuje metoda pro výpis celkového obsahu comboboxu který bych následně použil k porovnání?
Ahoj, to, co navrhuješ je určitě jedna z možností, ale udělal bych to tak, že timer použije nové pole, které porovná s původním a teprve pokud nebudou pole stejná, aktualizuje se combobox. Jednodušší mi však přijde zavolat ten timer nebo samotnou metodu pro získání portů kliknutím na rolovačku. Další možností by bylo ponechat vybraný port (selected) v proměnné aby nedošlo k přepsání vybraného portu. Když by se ti nedařilo, tak dej vědět a já ti pošlu kód.
Zkus nepoužívat cb.Items.Clear() a dělat jen rozdílové úpravy pomocí cb.Items.Add a cb.Items.Remove/RemoveAt.
Nebo můžeš místo Items použít DataSource a nahradit celou kolekci najednou. Před změnou si uchováš vybranou položku a po změně ji zkusíš nastavit zpět.
Ještě by to šlo vylepšit. Provést refresh comboboxu až poté co získá focus, ušetříš tak výkon potřebný na opakované získávání portů, které bude povětšinou zbytečné.
Ahoj
Pokoušel jsem o způsob srovnání dvou polí, pokud by byl obsah rozdílný,
pole se přepíše a aktualizuje v cb, ale narazil jsem.. Pokud není
připojený port, program padá.
private void timer1_Tick(object sender, EventArgs e)
{
ports = SerialPort.GetPortNames();
//Array.Sort(portss);
foreach (string port in ports)
{
if (ports[0] != null)
{
if (String.Equals(ports[0], portss[0]))
{
}
else
{
label2.Text = "probehlo";
comboBox1.Items.Clear();
comboBox1.Items.Add(port);
if (ports[0] != null)
{
comboBox1.SelectedItem = ports[0];
}
portss[0] = ports[0];
}
}
Nevadilo by ti poslat kód?
Zobrazeno 8 zpráv z 8.