webForumDet fria alternativet

Uppdatera panel i statusbar

.NET

7 svar · 306 visningar · startad av Gein

Medlem sedan sep. 20005 700 inlägg
Frågan#1

Tro det eller ej, men jag har gett mej in i .NET-världen. Sitter och fular med en Windows-applikation i C# där jag vill ha en liten statusbar.

Under min namespace har jag en public class Form1 vilket allting i princip ligger under. Även en liten publik klass GH som jag har skapat.
När jag anropar något under klassen GH så vill jag samtidigt uppdatera en panel i min statusbar (Form1.statusBar1.Panels[1].Text = "blalba") men detta fungerar inte.

Om jag skriver, under klassen GH, Form1. - så finns inte ens någon statusbar i listan (sitter med Visual Studio så jag får ju upp en fin lista med tillgängliga attribut). Om jag t.ex. istället lägger in en knapp i formen och sedan med hjälp av denna uppdaterar en panel i statusbar så fungerar det klockrent.

Tänkte att det hade något att göra med att statusbaren var satt som Private och ändrade då denna tillsammans med alla paneler till Public istället.

Det känns som att jag inte riktigt kommer åt statusbaren från min klass. Någon idé?

Felmeddelandet jag får tillbaka är: An object reference is required for the nonstatic field, method or property 'min_namespace.Form1.statusBar1'.

Medlem sedan juli 20022 537 inlägg
#2

Re: Uppdatera panel i statusbar

Gein skrev:

sitter med Visual Studio så jag får ju upp en fin lista med tillgängliga attribut

Intellisense? :OO

BTT:

Testa att skapa en ny instans av statusbaren.

VB:
Dim MinStatusBar As New min_namespace.Form1.statusBar1
MinStatusBar.Text = "Karlsson på taket"

C#?? (Helt osäker på denna)

min_namespace.Form1.statusBar1 MinStatusBar = new min_namespace.Form1.statusBar1;
MinStatusBar.Text == "Nisse";

Är helt otestad och förmodligen är jag ute och cyklar ;)

Medlem sedan sep. 20005 700 inlägg
#3

Tack för tipset men det fungerade tyvärr inte.

Medlem sedan feb. 20002 300 inlägg
#4

Det enda sättet GH kan känna till statusbaren på är att skicka antingen en referens till just statusbaren eller till hela formen och göra statusbaren publik (vilket är fult.)

Medlem sedan sep. 20005 700 inlägg
#5

Phorpher skrev:

Det enda sättet GH kan känna till statusbaren på är att skicka antingen en referens till just statusbaren eller till hela formen och göra statusbaren publik (vilket är fult.)

Får man se ett litet exempel?
Varför är det fult?

Medlem sedan feb. 20002 300 inlägg
#6

Jag tror det skulle underlätta att förklara om jag fick en beskrivning på vad du tänker göra och lite kod. Annars kanske det leder till missförstånd.

Generellt kan man säga att man vill separera det "grafiska" från själva datat. Jag antar således att din klass GH innehåller någon typ av data som du vill visa med hjälp av grafik (Form1). Det här kallas för model-view-control och är ett sk. "design pattern".

Du vill alltså helst inte ens peta på någon typ av grafik i ditt dataobjekt (model) utan all utritning och uppdatering av grafiken ska ske utanför ditt dataobjekt, i "view" för att vara mer precis.

Uppdateringen av model och view sker mha. en "control". Dvs. man säger åt controllen att data ska ändras. Datat ändras i modellen och view kör t.ex en update och ritar om fönstret.

Medlem sedan sep. 20005 700 inlägg
#7

Tack för svaret. Jag tror jag förstår lite bättre nu iaf. Man måste ta en liten omväg för att göra förändringar i det grafiska?

Jag e ny vad gäller OO-programmering så du får ursäkta om jag använder fel benämningar nu när jag ska försöka förklara.

Jag har alltså en klass GH som innehåller olika metoder (?). Via det grafiska gränssnittet (närmare bestämt via en meny) kan man anropa en metod ur GH. När denna metod är klar så ska en (låt mej ta ett enklare exempel för att inte krångla till i onödan) label på formen ändra text till True (om metoden gick vägen) annars ska den få texten False.

Det är precis vad jag vill göra. Fast nu när jag sitter här och skriver så kom jag nog på en bättre lösning. Metoden returnerar faktiskt en bool (True eller False) som säger om det gick bra. Det enklaste borde egentligen vara att bara hämta upp den boolean vid anrop till metoden för att sedan i menu_click, när värdet har returnerats, därifrån ändra labeln. Tänkte inte riktigt på det.

Men ponera att jag ska göra en mer omfattande uppdatering av det grafiska och att bara returnera det som ska ändras inte är möjligt. Hur gör jag då? Jag förstår visuellt din beksrivning på hur ändring ska ske men jag har inte en susning om hur det ska gå till.

Medlem sedan maj 20021 466 inlägg
#8

Du kan returnera data eller notifiera när datan är färdigbehandlad när som helst med hjälp av händelser (events).

Det använder du redan för att få reda på när knappar och menyval har klickats på etc. I hjälpen finns det information och exempel (se event keyword).

270 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)