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

[C#.NET] Inheritance

Pagina: 1
Acties:
  • 323 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik heb een eigen usercontrol gemaakt via inheritance namelijk een label. Deze label gebruik ik op verschillende formulieren en zou telkens dezelfde naam moeten hebben op de verschillende formulieren.
Bestaat er geen mogelijkheid, om één gemeenschappelijk methode te hebben die de naam van alle controls dan gaat veranderen op de verschillende formulieren?
Ik heb al gegoogeld, maar als je de juiste term niet kent, is dit zeer moeilijk om terug te vinden. Of kan je dit ergens aan passen via de base, ofzo? zoals je base.tostring() gaat overridden.
Weet iemand raad?

Een volgend probleem is een inheritance nemen van een zelfgemaakt form. Deze form in compact framework, heb ik een x-aantal aangepaste labels gegeven en een picturebox met een bijhorende button. Wanneer ik een nieuwe form wil maken die inheritanced van de bestaand form, dan staat alles niet correct op zijn plaats, de picturebox gaat bijvoorbeeld naar links, en hem gaan aanpassen lukt niet omdat je niet aan de eigenschappen kunt.
De bedoeling is om dus een template form te maken die dan bruikbaar is om telkens op te roepen bij nieuwe forms voor mijn applicatie
Wat zou hiervan het probleem kunnen zijn?

[ Voor 10% gewijzigd door Verwijderd op 16-10-2007 13:26 ]


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat bedoel je met dezelfde naam? Je bedoeld de variabele naam? Nee dat kan je niet wijzigen en ik zie ook geen reden waarom je dat zou willen.

Je tweede probleem zou ik niet weten wat er mis gaat. Mischien moet je eens debuggen. Hoe voeg je je componenten toe en hoe regel je de layout?

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op dinsdag 16 oktober 2007 @ 13:28:
Wat bedoel je met dezelfde naam? Je bedoeld de variabele naam?
Daarmee bedoel ik eigenlijk de text die in de label zelf zal komen. Deze text moet over de verschillende controls het zelfde zijn.
rwb schreef op dinsdag 16 oktober 2007 @ 13:28:
Hoe voeg je je componenten toe en hoe regel je de layout?
De componenten worden dus aangepast in de designer code. De grootte en positie worden dus vast gelegd. Maar blijkbaar gaat hij deze bij inheritance toch veranderen

Ik werk dus wel in VS.2008!

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

C#:
1
2
3
4
5
6
7
public class MyLabel : Label
{
    public MyLabel()
    {
        this.Text = "Mijn Text"
    }
}


:?

Je tweede vraag snap ik niet helemaal. Zou je het een beetje kunnen verduidelijken met code erbij e.d.?

[ Voor 12% gewijzigd door mOrPhie op 16-10-2007 14:01 ]

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


Verwijderd

Topicstarter
mOrPhie schreef op dinsdag 16 oktober 2007 @ 14:00:
C#:
1
2
3
4
5
6
7
public class MyLabel : Label
{
    public MyLabel()
    {
        this.Text = "Mijn Text"
    }
}
Wanneer je dit zal doen, dan zal enkel die ene control gewijzigd worden van Text. De andere usercontrols van MyLabel op de andere forms zullen hun oude naam behouden.
mOrPhie schreef op dinsdag 16 oktober 2007 @ 14:00:
Je tweede vraag snap ik niet helemaal. Zou je het een beetje kunnen verduidelijken met code erbij e.d.?
Hierbij zal ik van een eerder gemaakte form: voobeeld Myform. Een tweede Form maken
MyFormChild

dus: public partial class MyFormChild : myForm

Maar hierbij worden de controls van Myform niet op hun juiste plaats weergegeven in MyFormChild. Maar op een andere plaats

  • mOrPhie
  • Registratie: September 2000
  • Laatst online: 21-11 07:55

mOrPhie

❤️❤️❤️❤️🤍

Verwijderd schreef op dinsdag 16 oktober 2007 @ 14:07:
[...]


Wanneer je dit zal doen, dan zal enkel die ene control gewijzigd worden van Text. De andere usercontrols van MyLabel op de andere forms zullen hun oude naam behouden.
Ehm, nee? Mijn stukje code zorgt ervoor dat alle MyLabels dezelfde tekst hebben. Dat is toch wat je wilt? :)

Een experimentele community-site: https://technobabblenerdtalk.nl/. DM voor invite code.


  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Verwijderd schreef op dinsdag 16 oktober 2007 @ 14:07:
[...]


Wanneer je dit zal doen, dan zal enkel die ene control gewijzigd worden van Text. De andere usercontrols van MyLabel op de andere forms zullen hun oude naam behouden.
:? Van waar haal je dat ?
Als je dat doet, dan krijgt iedere instantie van 'MyLabel' in z'n Text property die tekst die jij in de constructor meegeeft.

https://fgheysels.github.io/


  • __fred__
  • Registratie: November 2001
  • Laatst online: 29-11 20:34
Je kunt ook de Text property overriden of shadowen en dan de setter / getter aanpassen aan je eigen wens.

Voor je tweede probleem. van inherited forms kun de properties van de controls van het baseform aanpassen als je in het base form de modifier van de controls op protected of protected internal zet.

Verwijderd

Topicstarter
whoami schreef op dinsdag 16 oktober 2007 @ 14:10:
[...]

:? Van waar haal je dat ?
Als je dat doet, dan krijgt iedere instantie van 'MyLabel' in z'n Text property die tekst die jij in de constructor meegeeft.
Ja ok, da's in de constructor. Maar wanneer je bestaande al aangemaakte Mylabels wilt de Text gaan aanpassen in één command,dan moet je dit per usercontrol Mylabel gaan doen, niet?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 20:54

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je zult dan idd alle controls moeten zoeken en die allemaal moeten aanpassen. Maar handiger is dan wellicht om er een event van te maken waar ze allemaal naar kunnen luisteren, zodat je als je de tekst wilt veranderen alleen nog dat event hoeft af te vuren.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
.oisyn schreef op dinsdag 16 oktober 2007 @ 14:21:
Je zult dan idd alle controls moeten zoeken en die allemaal moeten aanpassen. Maar handiger is dan wellicht om er een event van te maken waar ze allemaal naar kunnen luisteren, zodat je als je de tekst wilt veranderen alleen nog dat event hoeft af te vuren.
Of kan ik misschien dan best één Mylabel control aanmaken en dan die zelfde control oproepen in mijn verschillende forms.
Maar een event zou idd wel handiger zijn, stel dat ze toch later een verschillende text zou moeten hebben.

Verwijderd

Topicstarter
__fred__ schreef op dinsdag 16 oktober 2007 @ 14:15:
Voor je tweede probleem. van inherited forms kun de properties van de controls van het baseform aanpassen als je in het base form de modifier van de controls op protected of protected internal zet.
Dan lijkt het mij beter om de controls te kopieren naar de andere form. Jammer dat die inherited forms niet correct werken, zou wel handig geweest zijn.
Bedankt voor de hulp! .Text zal ik dan overiden

  • whoami
  • Registratie: December 2000
  • Laatst online: 21:14
Tja, wel vreemd dat die controls op je inherited forms niet goed blijven staan. Als deze private zijn in je base - form, dan zouden ze zowiezo niet mogen aangepast worden door de inherited form.
In VS.NET 2003 en 2005 blijkt dit toch goed te werken...

Ivm je Label: ik zou de approach die .oisyn aanhaalt nemen; dit is een soort van 'observer' pattern, en met weinig moeite kan je dan gewoon alle controls die 'geabonneerd' zijn op een bepaald event makkelijk aanpassen

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op dinsdag 16 oktober 2007 @ 14:43:
Tja, wel vreemd dat die controls op je inherited forms niet goed blijven staan. Als deze private zijn in je base - form, dan zouden ze zowiezo niet mogen aangepast worden door de inherited form.
In VS.NET 2003 en 2005 blijkt dit toch goed te werken...

Ivm je Label: ik zou de approach die .oisyn aanhaalt nemen; dit is een soort van 'observer' pattern, en met weinig moeite kan je dan gewoon alle controls die 'geabonneerd' zijn op een bepaald event makkelijk aanpassen
Heb ik ook eens geprobeerd in 2005, maar daar was hetzelfde probleem. Kan dit te maken hebben omdat ik werk met compact framework?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Ik zou zoiets doen als .oisyn voorstelt.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class MyLabel : Label, IDisposable
{
    public static void ChangeTextOnAllMyLabels(string text)
    {
        if (ChangeText != null)
            ChangeText(text);
    }

    private delegate void ChangeTextHandler(string text);
    private static ChangeTextHandler ChangeText;

    public MyLabel()
    {
        ChangeText += MyLabel_ChangeText;
    }

    public void Dispose()
    {
        ChangeText -= MyLabel_ChangeText;
    }
   
    private void MyLabel_ChangeText(string text)
    {
        Text = text;
    }
}


dan kan je met MyLabel.ChangeTextOnAllMyLabels("TextHier"); je labels allemaal tegelijk aanpassen.

Wat er niet goed gaat bij je Form snap ik ook niet. Ik heb er geen problemen mee als ik een Form Inherrit.

Mischien verander je nog andere properties waardoor de layout veranderd

[ Voor 18% gewijzigd door Woy op 16-10-2007 15:42 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1