Toon posts:

[C#] Controleren of object al bestaat

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben een applicatie in C# aan het schrijven en loop tegen het volgende aan. Ik heb links een OutlookBar met een aantal knoppen. Per knop bestaat er een soort formulier dat ik als component op een Panel heb aangemaakt. De eerste keer dat ik op een knop druk moet er een component worden aangemaakt.

Bestaat de component al, dan hoeft hij alleen maar te worden getoond met BringToFront();

Ik zat te denken aan zoiets:

code:
1
2
3
4
5
6
7
8
if (! AddUser1) {
ControlAddUser AddUser = new ControlAddUser();
AddUser1.Dock = DockStyle.Fill;
Controls.Add(AddUser1);
}
else {
AddUser1.BringToFront();
}


Weet iemand hoe ik dit op kan lossen?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:18

gorgi_19

Kruimeltjes zijn weer op :9

Heb je niet iets met Findcontrol, of werkt dat alleen in Webforms?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
Ik heb

http://longhorn.msdn.micr...ntrol/m/findcontrol0.aspx

gevonden, maar die lijkt me alleen voor system.web.ui.

  • Daspeed
  • Registratie: Maart 2001
  • Nu online
misschien een domme reactie(maar misschien ook niet),
maar kun je niet gebruik maken van een singleton pattern?

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 12:32

mulder

ik spuug op het trottoir

Wil je nu weten of dat control bestaat of een instantie van dat control?

dus AddUser1 of die specifieke User?

[ Voor 22% gewijzigd door mulder op 14-01-2004 10:54 ]

oogjes open, snaveltjes dicht


Verwijderd

Waarom creëer je niet gewoon alle controls (hidden) op het moment dat de applicatie wordt gestart?

Verwijderd

Topicstarter
Zou ook kunnen, maar als je een grote applicatie hebt, levert dat dan geen performanceprobleem op?

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Een Singleton pattern zou hier idd wel eens handig kunnen zijn.

Daarnaast kan je gewoon ook checken op null.
code:
1
2
3
4
5
6
7
8
if( AddUser1 == null )
{
    AddUser1 = new AddUser();
}
else
{
    AddUser1.BringToFront();
}

https://fgheysels.github.io/


  • mcB
  • Registratie: Mei 2002
  • Laatst online: 15-05 09:27

mcB

Als ik het goed heb begrepen heb je dus je balk met buttons,
je klikt op een knop en dan moet er een schermpje verschijnen op het panel 'control'
Als je voor het eerst op die knop klikt moet het schermpje nog aangemaakt worden,
anders tover 'm gewoon tevoorschijn.

In dat geval ga ik voor de reactie van DrClearbottom.
Een Singleton pattern zou hier geschikt voor zijn.

edit:

En dus ook voor de reactie van whoami ;) (net iets te laat)
Al zou ik liever het pattern gebruiken dan de null controle

[ Voor 18% gewijzigd door mcB op 14-01-2004 11:04 ]

Strix (Skullflame)


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 27-05 21:44

Robtimus

me Robtimus no like you

whoami schreef op 14 januari 2004 @ 10:59:
code:
1
2
3
4
5
if( AddUser1 == null )
{
    AddUser1 = new AddUser();
}
AddUser1.BringToFront();
Want dat BringToFront() moet natuurlijk altijd gebeuren he?

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

Verwijderd schreef op 14 januari 2004 @ 10:58:
Zou ook kunnen, maar als je een grote applicatie hebt, levert dat dan geen performanceprobleem op?
Ik denk dat dat wel mee zal vallen. Maar als je het echt netjes wilt oplossen moet je zoals anderen al aangaven gewoon voor het singleton pattern gaan. Kijk hier maar 's.

Verwijderd

Topicstarter
code:
1
2
3
4
5
if( AddUser1 == null )
{
    AddUser1 = new AddUser();
}
AddUser1.BringToFront();


Klinkt goed, en voor mij makkelijker dan een Singleton Pattern :P , maar ik krijg de melding:

code:
1
The name Adduser1 does not exist in the class or namespace 'App1.MainForm'

[ Voor 4% gewijzigd door Verwijderd op 14-01-2004 11:10 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Verwijderd schreef op 14 januari 2004 @ 11:08:
code:
1
2
3
4
5
if( AddUser1 == null )
{
    AddUser1 = new AddUser();
}
AddUser1.BringToFront();


Klinkt goed, en voor mij makkelijker dan een Singleton Pattern, maar ik krijg de melding:

code:
1
The name Adduser1 does not exist in the class or namespace 'App1.MainForm'
Ja, sorry hoor, maar die fout moet je wel zelf kunnen oplossen hoor.... Ik heb hier gewoon een voorbeeld-stukje neergezet, dat moet je natuurlijk wel zelf vertalen naar jouw situatie.

Trouwens, er is niets moeilijks aan een singleton pattern. Misschien moet je eens zoeken op google naar wat meer uitleg erover;
Het pattern zorgt er gewoon voor dat je slechts 1 instance hebt van een bepaalde classe:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyClass
{

   private static MyClass _instance;

   private MyClass()
   {
        
   }

   public static MyClass GetInstance()
   {
          if( _instance == null )
          {
              _instance = new MyClass();
          }
          return _instance;
   }
}

Zoiets ongeveer.

https://fgheysels.github.io/


  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 26-05 17:32
Ik snap hem misschien niet helemaal, maar kun je niet gewoon controleren of AddUser1 reeds voorkomt in de Controls collection?

if (!Controls.Contains(AddUser1))
{

}
else
{

}

Dan ben je toch klaar?

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:18

gorgi_19

Kruimeltjes zijn weer op :9

SlowMeDown schreef op 14 januari 2004 @ 15:04:
Ik snap hem misschien niet helemaal, maar kun je niet gewoon controleren of AddUser1 reeds voorkomt in de Controls collection?

if (!Controls.Contains(AddUser1))
{

}
else
{

}

Dan ben je toch klaar?
En als je hem op 4 plaatsen nodig hebt, of een controlmutatie moet doen, dan heb je een probleem; je moet immers continue die if-else constructie gebruiken. Een singleton is imho dan veel netter en duidelijker.

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 26-05 17:32
Niet als je 1 functie schrijft die als parameter een Control heeft en de control in de Controls collection van de form invoegt als de Control daar nog niet in zit en anders de BringToFront() method aanroept van de Control als die wel al in de Controls collection van de form zit.

public void BlaBla(Control control)
{
if (!this.Contains(control))
{
this.Controls.Add(control);
control.Dock = DockStyle.Fill;
}

control.BringToFront();
}

Sorry, maar weet niet hoe ik code kan formateren. Met een <code> tag ofzo in mijn reply???

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 12:18

gorgi_19

Kruimeltjes zijn weer op :9

SlowMeDown schreef op 14 januari 2004 @ 15:10:
Niet als je 1 functie schrijft die als parameter een Control heeft en de control in de Controls collection van de form invoegt als de Control daar nog niet in zit en anders de BringToFront() method aanroept van de Control als die wel al in de Controls collection van de form zit.
Dan blijf je het probleem houden als je verschillende acties wilt uitvoeren. Je gaat er nu vanuit dat je 4x hetzelfde wilt doen. De eerste keer wil je hem zichtbaar maken, de tweede keer invisible, etc.

Of wil je hiervoor 4 aparte methods aanmaken?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • SlowMeDown
  • Registratie: Mei 2003
  • Laatst online: 26-05 17:32
Je hebt op zich wel gelijk, alleen in de openingspost is er sprake van een Outlookbar control. Denk dat het principe voor iedere pagina (control) die hij wilt laten zien hetzelfde is. Je kunt dus in principe 1 OnClick schrijven voor iedere icon in de OutlookBar control en daar alle actie ondernemen om de juiste control te tonen, de vorige de verbergen etc. etc.
Pagina: 1