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

[C#] Een AboutBox openen

Pagina: 1
Acties:
  • 713 views sinds 30-01-2008

  • martijn00
  • Registratie: Juli 2006
  • Laatst online: 15:12
Ik heb in VS 2008 een AboutBox in mijn project gemaakt. Nu wil ik die kunnen openen met een button.

Dit heb ik al wel geprobeert:

'AboutBox1 About = new AboutBox1 ();
About.Show();'

en

'AboutBox1.Show;()'

maar dat bedoel ik niet, want ik wil geen nieuwe AboutBox hebben maar die openen die ik zelf al had gemaakt.

Ik kom er zelf niet achter, en google en GOT bieden tot nu toe ook nog geen oplossing.

[ Voor 5% gewijzigd door martijn00 op 03-01-2008 21:44 . Reden: opmerking van whoami ]


  • jan-marten
  • Registratie: September 2000
  • Laatst online: 17-11 19:58
Al eens AboutBox1.Show() geprobeert?

  • martijn00
  • Registratie: Juli 2006
  • Laatst online: 15:12
Ja daar was ik zelf ook al wel op gekomen, alleen vergeten te melden. Maar dat werkt niet.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:10
- Wat is niet werken ?
- Gebruik aub code-tags als je code -post.
- Wat bedoel je met 'ik wil geen nieuwe hebben, maar die tonen die ik zelf al had gemaakt' ? :?

Maw: lees eens even de PRG Quickstart, en pas je topicstart aan adhv deze quickstart.

https://fgheysels.github.io/


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-11 23:37

TeeDee

CQB 241

Heb je die AboutBox met een template gemaakt?
Volgens mij moet je dan in de Assembly Info gaan rommelen.

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


Verwijderd

Die AboutBox1 die je hebt gemaakt is een class die beschrijft hoe 'ie eruit moet zien wanneer 'ie getoond wordt, maar wanneer je 'm wil tonen zul je toch echt een nieuwe instance van AboutBox1 moeten maken. En dat doe je met '... = new AboutBox1()'.

Niks mis mee dus, en 't is juist wel precies wat je wil. :)

  • martijn00
  • Registratie: Juli 2006
  • Laatst online: 15:12
Verwijderd schreef op donderdag 03 januari 2008 @ 20:09:
Die AboutBox1 die je hebt gemaakt is een class die beschrijft hoe 'ie eruit moet zien wanneer 'ie getoond wordt, maar wanneer je 'm wil tonen zul je toch echt een nieuwe instance van AboutBox1 moeten maken. En dat doe je met '... = new AboutBox1()'.

Niks mis mee dus, en 't is juist wel precies wat je wil. :)
Dat zou kunnen, alleen als ik dus dat ...= new AboutBox1() maak dan zie ik niet de gegevens uit die "class".

  • Forcepoint
  • Registratie: Januari 2007
  • Laatst online: 20-11 14:32
Ik denk dat je dit bedoeld:
code:
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
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        AboutBox1 About = new AboutBox1();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            About.ShowDialog();
        }
    }
}


Als je About.Show() gebruikt, en je sluit de form, dan wordt het ge-disposed. Vernietigd dus. Vandaar ook dat je steeds = new ... moet gebruiken. Bij ShowDialog() gebeurt dit niet. Vraag me niet waarom, want dat weet ik ook niet precies 8)7

[ Voor 1% gewijzigd door Forcepoint op 03-01-2008 21:55 . Reden: Ik had een beetje vreemde zin gemaakt... ]


  • Razr
  • Registratie: September 2005
  • Niet online
Even tussendoor, moet je deze niet openen als een dialoog? Dus met
C#:
1
2
AboutBox1 about = new AboutBox1();
about.ShowDialog();

Verwijderd

martijn00 schreef op donderdag 03 januari 2008 @ 21:43:
Dat zou kunnen, alleen als ik dus dat ...= new AboutBox1() maak dan zie ik niet de gegevens uit die "class".
Die class heeft zelf geen gegevens, tenzij je 'm static maakt. En een form (window, aboutbox, etc.) is per definitie niet static. Dus de opgeslagen data die 'ie heeft verdwijnen wanneer de instance van dat form verdwijnt.
Wel kun je zorgen dat na de eerste keer tonen van je AboutBox deze niet wordt gereleased, zodat je 'm later nog weer kunt tonen, maar eigenlijk ben je dan aan 't knoeien. Gegevens die je bij wil houden wil je niet in een object (jouw AboutBox) bewaren die (terecht) wordt opgeruimd nadat 'ie niet meer nuttig is.

Wat jij zoekt is denk ik een eenvoudige versie van het MVC (model/view/controller) pattern: een model object dat de gegevens bevat of ophaalt, een view object (jouw AboutBox) dat die gegevens aan 't model object opvraagt en laat zien, en een controller (die button) die aan de AboutBox moet vertellen dat 'ie z'n werk moet doen.

Da's overigens niet ingewikkeld hoor, maar 't vergt wel iets meer dan 't bij elkaar klikken van wat controls en 't draaien van een wizard.

  • martijn00
  • Registratie: Juli 2006
  • Laatst online: 15:12
Razr schreef op donderdag 03 januari 2008 @ 21:52:
Even tussendoor, moet je deze niet openen als een dialoog? Dus met
C#:
1
2
AboutBox1 about = new AboutBox1();
about.ShowDialog();
Dan krijg ik een Aboutbox inderdaad, alleen er zijn dan geen gegevens ingevuld. Mischien kan iemand uitleggen hoe ik dat kan doen. Want eigelijk had ik een heel andere manier in gedachten, maar zo kan het denk ik ook wel lukken.

  • Razr
  • Registratie: September 2005
  • Niet online
martijn00 schreef op donderdag 03 januari 2008 @ 22:40:
[...]


Dan krijg ik een Aboutbox inderdaad, alleen er zijn dan geen gegevens ingevuld. Mischien kan iemand uitleggen hoe ik dat kan doen. Want eigelijk had ik een heel andere manier in gedachten, maar zo kan het denk ik ook wel lukken.
In VS2005.

-) Je klikt in je Solution Explorer (rechts) met de rechtermuisknop je op je solution. Dan add > new file. Vervolgens kies je voor een About box. Voor het gemak geven we hem even de naam OverOns.cs
-) In de designer opent het nieuwe bestand. Hier pas je 'm aan op je wensen vul je gegevens aan, afbeeldingen toevoegen etc. Daarna sla je het op.

Dan gebruik je de volgende code om deze te laten zien:
C#:
1
2
OverOns box = new OverOns();
box.ShowDialog();


Let wel op dat de velden die standaard aanwezig zijn (bijv. Version) gebonden zijn aan de waarden uit de properties van je solution.

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Waarom ShowDialog(); ? het is een Form, geen dialog?

Going for adventure, lots of sun and a convertible! | GMT-8


  • kunnen
  • Registratie: Februari 2004
  • Niet online
Snake schreef op donderdag 03 januari 2008 @ 23:44:
Waarom ShowDialog(); ? het is een Form, geen dialog?
Het is een dialog, hij moet als enige focus hebben.

Verwijderd

Pulsher schreef op donderdag 03 januari 2008 @ 23:48:
[...]

Het is een dialog, hij moet als enige focus hebben.
Waarom mag je niet met een applicatie verder werken als z'n about box openstaat? Dat is zo'n raar stukje user interface design, dat ik dat nooit begrepen heb...

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op vrijdag 04 januari 2008 @ 00:29:
[...]

Waarom mag je niet met een applicatie verder werken
Waarom zou je een about box openen als je aan het werk bent? :+
semi-serieus ;)

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


Verwijderd

RobIII schreef op vrijdag 04 januari 2008 @ 00:31:
[...]

Waarom zou je een about box openen als je aan het werk bent? :+
semi-serieus ;)
Als je bijvoorbeeld een versienummer even snel wilt copy-pasten?

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Verwijderd schreef op vrijdag 04 januari 2008 @ 01:00:
[...]

Als je bijvoorbeeld een versienummer even snel wilt copy-pasten?
Ik neem aan dat het programma zelf wel het serienummer heeft, dus daarin hoef je dat niet te pasten.
Wat is soms nog wel doe is dat ik een 'copy to clipboard' button toevoeg en dat deze een een voorgedefineerde tekst (meestal met username, serialid, versienummers, etc) naar het clipboard kopieert.

Daarnaast heeft het geen zin om meerdere about boxen te openen, want als ik terug kan naar de applicatie zonder de about box te sluiten, kan ik via de applicatie een tweede, derde, vierde, etc about box openen. Want die aboutbox is klein, de gebruiker ziet hem niet meer en denkt dat ie al gesloten is..

Dergelijke informatie schermen worden daarom als dialog getoont. Daarnaast is het common practice en houd iedereen eigenlijk (ook bij andere besturings systemen) dit principe aan. Doe je het niet, dan kun je eventueel ook geen 'Designed for Windows XX' certificerings traject doorlopen.

If it isn't broken, fix it until it is..


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 19-11 19:37
Je moet even naar de naam (Name) kijken van je aboutbox in de properties. Als deze aboutBox1 heet hoef je alleen maar aboutBox1.Show() te doen. Geen nieuw object maken dus, want dan wordt inderdaad dit nieuwe object geopend.

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20-11 23:37

TeeDee

CQB 241

Dat was precies de 1e reply in dit topic. :)

Edit:
De 1e reply is van jan-marten, en die geeft meteen al aan: AboutBox1.Show();

[ Voor 54% gewijzigd door TeeDee op 04-01-2008 09:54 ]

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


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 19-11 19:37
Hoezo?
C#:
1
2
AboutBox1 About = new AboutBox1 ();
About.Show();'

Die eerste regel maakt een nieuw object aan die getoond wordt, dus de instantie die al in de designer-code gemaakt is verdwijnt.
Hij moet dus even in de properties van de aboutbox kijken (die hij met de designer gemaakt heeft) om te kijken wat de naam is, en stel deze heet aboutBoxFoo, hoeft hij alleen maar aboutBoxFoo.Show() te doen.

en
C#:
1
'AboutBox1.Show;()' 

Kan niet eens want AboutBox1 is een class en geen instantie.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
martijn00 schreef op donderdag 03 januari 2008 @ 22:40:
[...]
Dan krijg ik een Aboutbox inderdaad, alleen er zijn dan geen gegevens ingevuld. Mischien kan iemand uitleggen hoe ik dat kan doen. Want eigelijk had ik een heel andere manier in gedachten, maar zo kan het denk ik ook wel lukken.
No offence, maar je bent een programma aan het maken maar je hebt geen idee wat een class is, hoe je gegevens in een object stopt via properties etc? Dat wordt dan een lange weg...

Ik zou eerst daar eens naar kijken.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • Koppensneller
  • Registratie: April 2002
  • Laatst online: 20-11 16:25

Koppensneller

winterrrrrr

Mastermind schreef op vrijdag 04 januari 2008 @ 09:34:
en
C#:
1
'AboutBox1.Show;()' 

Kan niet eens want AboutBox1 is een class en geen instantie.
Tenzij het een singleton betreft, en Show() een statische methode is die naar de instantie van de AboutBox wordt gedelegeerd. ;)

  • Zamalan
  • Registratie: September 2007
  • Laatst online: 26-02-2015

Zamalan

Whine Connaisseur

[b][message=29360967,noline]<knip>
Als je About.Show() gebruikt, en je sluit de form, dan wordt het ge-disposed. Vernietigd dus. Vandaar ook dat je steeds = new ... moet gebruiken. Bij ShowDialog() gebeurt dit niet. Vraag me niet waarom, want dat weet ik ook niet precies 8)7
ShowDialog is bedoeld om "kleine" input schermpjes te tonen. Bijvoorbeeld "Geef uw naam [...]". Wanneer de gebruiker op Ok klikt gaat het schermpje weg en gaat de aanroepende methode verder. (ShowDialog geeft ook een DialogResult terug dacht ik, dus DialogResult.Ok, DialogResult.Yes, DialogResult.Cancel enz.)
In het verdere verloop van de methode kun je dus ook nog gegevens opvragen, in mijn gegeven voorbeeld kun je dus nog de ingevulde naam opvragen.

(Zo dacht ik toch, mijn C# is een beetje roestig)

Als je gegevens in je dialog wilt meegeven zul je ze moeten meegeven met de constructor.
C#:
1
2
AboutBox1 about = new AboutBox1("Bedrijf nv", "2008");
about.ShowDialog();

[ Voor 10% gewijzigd door Zamalan op 04-01-2008 09:50 ]

MSI GX660 --- i5 460M /// 4GB DDR3 /// Mobility Radeon HD5870 /// 1920x1080 /// 500GB


Verwijderd

Niemand_Anders schreef op vrijdag 04 januari 2008 @ 08:51:
[...]
Daarnaast heeft het geen zin om meerdere about boxen te openen, want als ik terug kan naar de applicatie zonder de about box te sluiten, kan ik via de applicatie een tweede, derde, vierde, etc about box openen. Want die aboutbox is klein, de gebruiker ziet hem niet meer en denkt dat ie al gesloten is..
Maar dan kan je toch zodra de gebruiker weer 'about' kiest de al openstaande about box gewoon naar voren halen.
Dergelijke informatie schermen worden daarom als dialog getoont. Daarnaast is het common practice en houd iedereen eigenlijk (ook bij andere besturings systemen) dit principe aan. Doe je het niet, dan kun je eventueel ook geen 'Designed for Windows XX' certificerings traject doorlopen.
Ik heb het even uitgeprobeerd onder safari op Mac OSX en deze laat me gewoon doorwerken met de about box open. Kies ik vervolgens weer 'about' dan wordt m'n oude about box naar voren gehaald. Ook iCal werkt op die manier...

Maargoed... dit is een user interface design discussie die niet thuishoort in dit topic eigenlijk...

  • martijn00
  • Registratie: Juli 2006
  • Laatst online: 15:12
Ik heb wat dingen geprobeert met de reply's die zijn gegeven, maar het is nog niet zoals het moet. Ik ben zelfs nog niet iets verder gekomen. Daarom hier maar wat screenshots.

Afbeeldingslocatie: http://www.freewebs.com/martijnvandijk/AboutBox/about4.jpg
Klik op plaatje voor groter formaat: Dit is de foutmelding die er wordt gegeven op de reactie van: Zamalan

Afbeeldingslocatie: http://www.freewebs.com/martijnvandijk/AboutBox/about2.jpg
Zo komt het er uit te zien als ik dus dit doe:

'AboutBox1 About = new AboutBox1 ();
About.Show();'

Of dit:

'AboutBox1 About = new AboutBox1 ();
About.ShowDialog();'

Het verschil is dat de OK knop het doet.


Afbeeldingslocatie: http://www.freewebs.com/martijnvandijk/AboutBox/about3.jpg
Dit wil ik ongeveer.

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:10
Ik denk dat dit topic ondertussen niet zo veel zin meer heeft. Het is duidelijk dat je heel wat basiskennis mist mbt programmeren / OOP, en ik denk dat het daarom beter is dat je je daar eerst wat meer gaat in verdiepen.
(constructor, variablen, properties, assignment zijn een paar steekwoorden).

Verder moet je ook eens kijken wat je in de assemblyinfo.cs file kunt plaatsen qua informatie (versienr, auteur, etc.. ), en hoe je die informatie daar kunt uithalen.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.