Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] Tab veranderen onderscheppen (TabControl)

Pagina: 1
Acties:

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19-11 18:15
Goeieavond :)

Ik ben in C# bezig met een tooltje, en daarbij moet je op het eerste tabblad inloggen. Zolang je niet ingelogt bent, (logged_in=false) mag je niet naar de andere tabbladen. Het is niet de bedoeling dat de controls op de andere tabbladen zichtbaar zijn, dus disabled maken is geen optie. Het is echt de bedoeling dat er niet van tabblad gewisselt kan worden. Dit lukt mij echter niet. Ik dacht het te kunnen onderscheppen door een TabIndexChanged event eraan te hangen:
C#:
1
2
3
4
5
6
7
private void HaxorMain_tabctl_TabIndexChanged(object sender, EventArgs e)
        {
            if (!CheckLogin( ))
            {
                this.HaxorMain_tabctl.TabIndex = 0; //0 is het eerste tabblad als het goed is
            }
        }
maar dat werkt niet. Je kan het tab gewoon veranderen want het event wordt niet eens aangeroepen, heb ik met de mooie debug functie van Visual C# 2008 uitgevonden.

Dus toen gaf ik het op en ben gaan zoeken. Ik vond wat op de thuisbasis: \[C#] Disable TabPage maar dat ging over .NET 1.0 en dat is toch al een hele tijd geleden en het verschil tussen .NET 1.0 en 3.5 is toch aanzienlijk. Dus ik heb vriend Google erbij gehaald maar daar kon ik niet veel nuttigs vinden behalve deze: http://www.thescripts.com/forum/thread246264.html maar dit is ook al redelijk gedateerd en een echte oplossing wordt ook niet aangegeven.

Dus nu is de laatste oplossing: De vraag stellen aan mensen die er wat meer van weten. Hoe moet ik voorkomen dat een gebruiker van tabblad wisselt?

Alvast bedankt,
Sebas

Gebruikte taal: C#, .NET 3.5 (dus 2.0 verschilt niet veel)
IDE: Microsoft Visual C# 2008
Target platform: Windows XP

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 18-11 20:15
Kun je niet simpelweg de andere tabbladen verbergen?

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19-11 18:15
kingjotte schreef op zaterdag 16 februari 2008 @ 18:40:
Kun je niet simpelweg de andere tabbladen verbergen?
Nee, de tabbladen hebben geen Visible of Disabled property. Dat heeft alleen het tabcontrol.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • cowgirl
  • Registratie: November 2000
  • Laatst online: 17-12-2020
Sebazzz schreef op zaterdag 16 februari 2008 @ 18:30:
Je kan het tab gewoon veranderen want het event wordt niet eens aangeroepen, heb ik met de mooie debug functie van Visual C# 2008 uitgevonden.
Dus de eventhandler (dat is de code die je post) is niet gebind aan je event (want dat event gaat echt wel af). De oplossing is dus binden:
C#:
1
HaxorMain_tabctl.TabIndexChanged += new eventhandler(HaxorMain_tabctl_TabIndexChanged)

  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19-11 18:15
Nee, want ik had het event al gebonden (tenminste, Visual Studio heeft dat gedaan). Ik heb het gecontroleerd en die regel heeft Visual Studio al gemaakt.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 14-10 13:38

dusty

Celebrate Life!

Ik heb het even gecontroleerd in VS2008
C#:
1
this.tabControl1.TabIndexChanged += new System.EventHandler(this.tabControl1_TabIndexChanged);

Staat in de designer.cs echter gaat de event ook hier niet af

een work-around is de volgende code op de "selecting" event.
Ik ga hierbij even vanuit dat er een variable "loggedin" wat een int is die aangeeft wat iemands userid is.. en als hij niet is ingelogged is het een 0.
C#:
1
2
3
4
5
6
7
        private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
        {
            if (this.tabControl1.SelectedIndex != 0)&&(loggedin==0))
            {
                this.tabControl1.SelectedIndex = 0;
            }
        }

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19-11 18:15
Werkt helemaal! :D
Dank je wel.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


Verwijderd

TabIndex is toch de volgorde van de items die geselecteerd worden door herhaaldelijk op "tab" te drukken...dat heeft inderdaad vrij weinig met het verwisselen van tabbladen te maken ;).

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Misschien moet je die login controls wel van de tabcontrol afhalen ....

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Sebazzz schreef op zaterdag 16 februari 2008 @ 18:41:
[...]

Nee, de tabbladen hebben geen Visible of Disabled property. Dat heeft alleen het tabcontrol.
Je kunt de sheets wel uit de lijst verwijderen en later terugstoppen.

Professionele website nodig?


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
kingjotte schreef op zaterdag 16 februari 2008 @ 18:40:
Kun je niet simpelweg de andere tabbladen verbergen?
farlane schreef op zondag 17 februari 2008 @ 00:34:
Misschien moet je die login controls wel van de tabcontrol afhalen ....
curry684 schreef op zondag 17 februari 2008 @ 00:59:
[...]

Je kunt de sheets wel uit de lijst verwijderen en later terugstoppen.
Euh, mis ik iets :?

C#:
1
2
3
4
private void tabControl1_Selecting(object sender, TabControlCancelEventArgs e)
{
    e.Cancel = true;
}


Of; in TS's geval dus:

C#:
1
    e.Cancel = !logged_in;
cowgirl schreef op zaterdag 16 februari 2008 @ 18:42:
[...]

Dus de eventhandler (dat is de code die je post) is niet gebind aan je event (want dat event gaat echt wel af). De oplossing is dus binden:
C#:
1
HaxorMain_tabctl.TabIndexChanged += new eventhandler(HaxorMain_tabctl_TabIndexChanged)
dusty schreef op zaterdag 16 februari 2008 @ 18:56:
Ik heb het even gecontroleerd in VS2008
C#:
1
this.tabControl1.TabIndexChanged += new System.EventHandler(this.tabControl1_TabIndexChanged);

Staat in de designer.cs echter gaat de event ook hier niet af
Nogal wiedes; ->
Verwijderd schreef op zaterdag 16 februari 2008 @ 19:59:
TabIndex is toch de volgorde van de items die geselecteerd worden door herhaaldelijk op "tab" te drukken...dat heeft inderdaad vrij weinig met het verwisselen van tabbladen te maken ;).
Psies! Zie ook de documentatie ;) Een textbox, button (...and so on...) hebben ook een TabIndexChanged event en een TabIndex property.

[ Voor 123% gewijzigd door RobIII op 17-02-2008 02:35 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Weet ik niet. Het ging me er niet zozeer om of het *kan*, maar of het misschien logischer is om de login controls van het eerste tabblad af te halen, hoef je em ook niet (in)visible te maken. Misschien verdienen de login controls wel een heel eigen frame oid.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
farlane schreef op zondag 17 februari 2008 @ 03:21:
[...]


Weet ik niet. Het ging me er niet zozeer om of het *kan*, maar of het misschien logischer is om de login controls van het eerste tabblad af te halen, hoef je em ook niet (in)visible te maken. Misschien verdienen de login controls wel een heel eigen frame oid.
Dat ben ik met je eens; het lijkt me geen goed (of minder goed) GUI ontwerp zoals het nu bedoeld wordt.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • dusty
  • Registratie: Mei 2000
  • Laatst online: 14-10 13:38

dusty

Celebrate Life!

RobIII schreef op zondag 17 februari 2008 @ 02:23:
[..]
Psies! Zie ook de documentatie ;) Een textbox, button (...and so on...) hebben ook een TabIndexChanged event en een TabIndex property.
Duh, dacht blijkbaar niet na vanochtend hij wilde natuurlijk eigenlijk de tabControl1_SelectedIndexChanged gebruiken :)

Wat ik dus nooit heb opgemerkt is dat er geen tabvisible voor een tabpage is in C# ( wat dus wel beschikbaar is binnen Delphi. )

Maar ik sluit me er wel bij aan dat het op zich een slechte UI design is.

Back In Black!
"Je moet haar alleen aan de ketting leggen" - MueR


  • Tepel
  • Registratie: Juni 2006
  • Laatst online: 17-08-2024
Het lijkt mij inderdaad een goed plan op de login controls op een eigen panel te gooien.
Deze neemt standaard het hele venster in gebruik (ligt dus over je TabPanel heen) en zodra je bent ingelogd zet je hem om invisible en voila!

0x7F


  • Sebazzz
  • Registratie: September 2006
  • Laatst online: 19-11 18:15
De interface is niet perfect nee, maar het is zegmaar een persoonlijk projectje. Dit programma zal door mi en een paar vrienden -die ook 'wel handig zijn' met computers- gebruikt worden. Het is meer een verkennend projectje. Ik heb tot nu toe altijd met C++ gewerkt en sinds kort ben ik bezig met C# en doormiddel van een paar programmaatjes te maken leer je veel :) Ik moet trouwens wel zeggen dat C# stukken makkelijker (minder streng) is dan C++ :o Het is bijna te makkelijk.

[Te koop: 3D printers] [Website] Agile tools: [Return: retrospectives] [Pokertime: planning poker]


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 19-11 19:37
Ik raad iedereen de UltraTabControl van Infragistics aan. Je kunt tabs links, rechts, onder, boven zetten. Verbergen of zichtbaar maken, Enabled of Disabled. En hij heeft een shared tabppage control. Daarnaast kun in de tabs naast tekst ook afbeeldingen inzetten, kun je de appearance van de tabs veranderen, kortom alles wat je maar kunt bedenken! :D
Pagina: 1