Toon posts:

[C#] Controls uit picturebox halen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi ik heb een picturebox (C#) met 1 of meerdere labels en/of pictureboxen erin. Als het control een Label is wil ik er iets anders mee doen dan als het een picturebox is. Maar als het een label is wil ik wel de label eigenschappen kunnen gebruiken en bij een picturebox hetzelfde.

Ik doe het nu met: foreach (PictureBox pb in pictureBox1.Controls), dit gaat goed totdat hij een Label tegenkomt, dan krijg ik de volgende (logische) fout 'System.InvalidCastException', Specified cast is not valid. Als ik foreach (Control pb in pictureBox1.Controls) gebruik werkt het wel maar dan kan ik de eigenschappen niet gebruiken van een Label of Picturebox.

Wat ik dus graag zou willen om alle Controls in PictureBox1 langs te gaan en dan te kijken of het Control een Label of een PictureBox is en aan de hand hiervan een Label of een PictureBox van het Control te maken.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 16:23

TeeDee

CQB 241

C#:
1
2
3
4
foreach(Control pb in pictureBox1.Controls)
{
Debug.WriteLine("Type: " + pb.GetType())
}

Volgens mij kan je daar wel iets mee doen.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:58
zoals TeeDee al laat uitschijnen, zal je iedere keer moeten checken van welk type de control is, en dan, adhv de uitkomst daarvan naar de juiste control gaan casten.
(Tip: check de is operator eens.

https://fgheysels.github.io/


  • sig69
  • Registratie: Mei 2002
  • Nu online
Of de as operator.

Roomba E5 te koop


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:58
In dit geval zou ik de as niet gebruiken.
De as gaat al gaan casten, en returned null als de cast niet gelukt is. Echter, hier wil je gewoon eerst weten naar welk type je wilt casten.
Als je iedere keer gaat casten mbhv as tot wanneer je geen null terugkrijgt, vind ik dat iets minder leesbaar dan met die is operator te werken.
Maar goed, as is idd wel performanter dan is

https://fgheysels.github.io/


Verwijderd

Topicstarter
Het is gelukt, eerst kijken welk type het is en daarna pas casten

Bedankt!

Verwijderd

Of met de is operator. Klein voorbeeldje.

dgBlog is van het type datagrid.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dgBlog.DataSource = Bericht.getAll();

if(dgBlog is TextBox)//een datagrid is nooit een textbox
    MessageBox.Show("Datagrid blog is een textbox ????");

else if(dgBlog is DataGrid)//een datagrid is altijd van het type datagrid
    MessageBox.Show("Datagrid blog is een datagrid.");


Object obj = dgBlog; //De werking blijft hetzelfde na het casten naar een abstracter type zoals een object

if(obj is TextBox)
    MessageBox.Show("Datagrid blog is een textbox ????");

else if(obj is DataGrid)
    MessageBox.Show("Datagrid blog is een datagrid.");

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:58
Verwijderd schreef op maandag 24 oktober 2005 @ 18:04:
Of met de is operator. Klein voorbeeldje.

dgBlog is van het type datagrid.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dgBlog.DataSource = Bericht.getAll();

if(dgBlog is TextBox)//een datagrid is nooit een textbox
    MessageBox.Show("Datagrid blog is een textbox ????");

else if(dgBlog is DataGrid)//een datagrid is altijd van het type datagrid
    MessageBox.Show("Datagrid blog is een datagrid.");


Object obj = dgBlog; //De werking blijft hetzelfde na het casten naar een abstracter type zoals een object

if(obj is TextBox)
    MessageBox.Show("Datagrid blog is een textbox ????");

else if(obj is DataGrid)
    MessageBox.Show("Datagrid blog is een datagrid.");
[rml]whoami in "[ C#] Controls uit picturebox halen"[/rml]
:)

https://fgheysels.github.io/


Verwijderd

Excuses, had alleen nog maar de as-operator gelezen in het topic. En daarbij, een klein voorbeeldje had ik toch wel verwacht van een modrator :9

[ Voor 14% gewijzigd door Verwijderd op 25-10-2005 08:19 ]

Pagina: 1