[C#, Winform] Popup genereren op een event

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dames en Heren,

Ik ben bezig met een applicatie wat een popup dient te genereren op een bepaald event. Dit event is wanneer er een telefoontje binnenkomt. Wanneer dit zo is wil ik kunnen zien wie er belt, en daar wil ik die popup voor gebruiken.

Ik heb momenteel een C# winform gemaakt met deze functionaliteit (althans bijna alle...). Maar omdat ik even niet verder kan met hetgeen wat ik aan het maken was heb ik bedacht om deze functionaliteit maar in te bouwen, het werk hoeft namelijk niet stil te liggen.



Doel:
- Een winform die in je systray actief blijft: gelukt;
- De winform dient als een soort popup in beeld te komen op 1 vaste positie in het scherm (net zoals msn messenger popups).



Preview:
Afbeeldingslocatie: http://artwork-creations.com/preview.png



Ik heb gezocht op google met zoekwoorden als: C# generate popup on event, C# popup winform, etc, etc.
Dit heeft mij weinig opgeleverd.



Mijn vraag:
- Is het uberhaupt mogelijk wat ik wil bereiken?
- Hoe heet deze techniek/methode ? (dan weet ik tenminste waar ik naar op zoek ben ;), indien mogelijk.
- Hoe bereik ik dit doel, indien mogelijk.

[EDIT]
-Ik sta open voor verbeteringen in elk opzicht, ik ben vrij nieuw in deze taal en dit is onderdeel van mijn stage. Ik stel deze vragen omdat ik mijzelf graag in deze taal wegwijs wil maken.

[ Voor 8% gewijzigd door Verwijderd op 24-02-2010 12:18 ]


Acties:
  • 0 Henk 'm!

  • BM
  • Registratie: September 2001
  • Nu online

BM

Moderator Spielerij
Je krijgt een event binnen als er een telefoontje ontvangen word, begrijp ik uit je bericht?

Wat is er dan anders aan om in dat event een formulier te openen, dan in de eventhandler van een knop?

Xbox
Even the dark has a silver lining | I'm all you can imagine times infinity, times three


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Wat lukt er nou precies niet? Het tonen van een Window in de hoek van je scherm is niet zo moeilijk.
C#:
1
2
3
MyForm form = new MyForm();
form.Location = new Point(xPos, yPos);
form.Show();

Dus geef eens wat beter aan wat je zelf al allemaal geprobeerd hebt, en wat er niet wil lukken.

“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.”


Acties:
  • 0 Henk 'm!

  • lier
  • Registratie: Januari 2004
  • Nu online

lier

MikroTik nerd

En met .ShowDialog() wordt je formulier over de applicatie heen geplaatst...

Eerst het probleem, dan de oplossing


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op woensdag 24 februari 2010 @ 12:16:
Mijn vraag:
- Is het uberhaupt mogelijk wat ik wil bereiken?
D'uh. Dat heb ik je eerder verteld ;)
Verwijderd schreef op woensdag 24 februari 2010 @ 12:16:
- Hoe heet deze techniek/methode ? (dan weet ik tenminste waar ik naar op zoek ben ;), indien mogelijk.
Zoek eens op MSN style popup.
offtopic:
Again: je weet dat je 't wiel opnieuw aan 't uitvinden bent he? ;)

[ Voor 6% gewijzigd door RobIII op 24-02-2010 12:38 ]

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


Acties:
  • 0 Henk 'm!

  • FireDrunk
  • Registratie: November 2002
  • Laatst online: 09:10
.TopMost = true?

Even niets...


Acties:
  • 0 Henk 'm!

Verwijderd

Wat Woy zei, maar maak dan je form met FormBorderStyle op None. Of maak je form onverplaatsbaar.

Bv zo: http://vaibhavgaikwad.wor...ovable-windows-form-in-c/
Of zo: http://bytes.com/topic/c-...moving-application-window

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RobIII schreef op woensdag 24 februari 2010 @ 12:37:
[...]

D'uh. Dat heb ik je eerder verteld ;)


[...]

Zoek eens op MSN style popup.
offtopic:
Again: je weet dat je 't wiel opnieuw aan 't uitvinden bent he? ;)
Hahahaha, ja RobIII, grote kans dat ik dit indd aan het doen ben, en waarom ? Omdat ik ervan wil leren :P Ik heb nu de kans om mijzelf dit soort technieken aan te leren en wil dat dus ook doen. Dus ja, het wiel opnieuw uitvinden om de exacte werking ervan te begrijpen.

Overigens zal ik kijken naar wat je gepost heb, ziet er goed uit !
offtopic: Het lukt aardig goed met de tool! Ik heb de juiste TAPI nu en ik heb de events bijna klaar! Ik bericht je wel als ik iets ervan ook echt werkend heb ;)
BM schreef op woensdag 24 februari 2010 @ 12:30:
Je krijgt een event binnen als er een telefoontje ontvangen word, begrijp ik uit je bericht?

Wat is er dan anders aan om in dat event een formulier te openen, dan in de eventhandler van een knop?
Juist, dat is exact wat ik wil doen, alleen ik weet enkel nog niet hoe ik in de code zeg: maximaliseer mijn winform, op deze plek, met een slide effect, en verdwijn weer wanneer de event van het telefoontje voorbij is.

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 24 februari 2010 @ 13:36:
[...]
Juist, dat is exact wat ik wil doen, alleen ik weet enkel nog niet hoe ik in de code zeg: maximaliseer mijn winform, op deze plek, met een slide effect, en verdwijn weer wanneer de event van het telefoontje voorbij is.
Als je dat niet weet, probeer het dan eens in deelproblemen op te delen. Weet je wel hoe je een WinForm moet tonen? Weet je hoe je hem moet maximaliseren? Weet je hoe je hem op een plek kan zetten? Weet je hoe je een slide animatie moet maken? Weet je hoe je een venster moet laten verdwijnen?

Het is leuk dat je van alles tegelijk wil doen, en zolang dat lukt is dat geen probleem. Maar zo gauw als je tegen problemen aanloopt, zul je moeten isoleren wat exact je probleem is. Dat betekend dus dat je je probleem stap voor stap gaat proberen op te lossen.

“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.”


Acties:
  • 0 Henk 'm!

Verwijderd

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
        private Form f;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (f == null)
            {
                f = new Form();
                f.WindowState = FormWindowState.Maximized;
                f.Show();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (f != null)
            {
                f.Close();
                f = null;
            }
        }

Dat is een quick and dirty oplossing ;)
edit:
De slide animatie moet je zelf verzinnen

[ Voor 4% gewijzigd door Verwijderd op 24-02-2010 13:51 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Woy schreef op woensdag 24 februari 2010 @ 13:47:
Als je dat niet weet, probeer het dan eens in deelproblemen op te delen.

Weet je wel hoe je een WinForm moet tonen?
ja :D
Weet je hoe je hem moet maximaliseren?
ja :D
Weet je hoe je hem op een plek kan zetten?
nee :(
Weet je hoe je een slide animatie moet maken?
:(
Weet je hoe je een venster moet laten verdwijnen?
ja :D
En ik d8 dat ik mijn vraag wel goed had neergelegd...Kennelijk dus niet :D.

Anyway, waar het probleem dus ligt is niet:
- Hoe kan ik de scherm pas tonen in een event,
Het probleem ligt wel:
- Hoe kan ik een msn-like scherm tonen (slide effect, positionering).




Ik hoop dat ik het nu een stukje duidelijk heb kunnen maken! Ik ga nu de informatie verwerken die ik al van jullie heb ontvangen, want daar zit grotendeels in wat ik wil bereiken :D.
Verwijderd schreef op woensdag 24 februari 2010 @ 13:50:
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
        private Form f;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (f == null)
            {
                f = new Form();
                f.WindowState = FormWindowState.Maximized;
                f.Show();
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (f != null)
            {
                f.Close();
                f = null;
            }
        }

Dat is een quick and dirty oplossing ;)
edit:
De slide animatie moet je zelf verzinnen
Zal ik doen! heb van Robnlll ook informatie daarover ontvangen!:D

Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

plek zetten: this.location = new point(0,0);
bij jou iets als (+-) Screen.PrimaryScreen.Bounds.Width - this.Width voor de X positie.
in de properties van je form zet je location op userdefined of manual

sliden doe je adhv een timer. positie bijhouden, per timer tick naar iets optellen en dan ff wachten en aftellen (op de Y as). basic stuff dus.

[ Voor 16% gewijzigd door ? ? op 24-02-2010 14:17 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Fastman schreef op woensdag 24 februari 2010 @ 14:13:
plek zetten: this.location = new point(0,0);
bij jou iets als (+-) Screen.PrimaryScreen.Bounds.Width - this.Width voor de X positie.
in de properties van je form zet je location op userdefined of manual

sliden doe je adhv een timer. positie bijhouden, per timer tick naar iets optellen en dan ff wachten en aftellen (op de Y as). basic stuff dus.
Oki!:D Super! Dus op elke tick van de timer schuift eigenlijk de de positie van de Y-as? Dat is dan lekker simpel dan. bedankt!

Ik zal dit meenemen in mijn project en proberen zo goed mogelijk toe te passen!

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 24 februari 2010 @ 14:08:
[...]

En ik d8 dat ik mijn vraag wel goed had neergelegd...Kennelijk dus niet :D.

Anyway, waar het probleem dus ligt is niet:
- Hoe kan ik de scherm pas tonen in een event,
Het probleem ligt wel:
- Hoe kan ik een msn-like scherm tonen (slide effect, positionering).
Dat is dan dus ook je probleem. Het is dan verwarrend dat je het in je openingspost hebt over events, telefoontjes die binnen komen, systray. Het is leuke achtergrond informatie, maar het is handig ( ook voor jezelf ) als je je probleem beter isoleert en benoemt.

Zoals hierboven inderdaad gezegd is, kun je de positie van een form bepalen met de Location property, en een slide effect is niks anders dan snel achter elkaar de positie veranderen.

[ Voor 8% gewijzigd door Woy op 24-02-2010 14:53 ]

“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.”


Acties:
  • 0 Henk 'm!

Verwijderd

Fastman schreef op woensdag 24 februari 2010 @ 14:13:
sliden doe je adhv een timer. positie bijhouden, per timer tick naar iets optellen en dan ff wachten en aftellen (op de Y as). basic stuff dus.
Dat is alleen niet echt een nette oplossing ;) Je kan beter P/Invokes gebruiken.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 24 februari 2010 @ 12:16:
Doel:
- Een winform die in je systray actief blijft: gelukt;
- De winform dient als een soort popup in beeld te komen op 1 vaste positie in het scherm (net zoals msn messenger popups).



Mijn vraag:
- Is het uberhaupt mogelijk wat ik wil bereiken?
- Hoe heet deze techniek/methode ? (dan weet ik tenminste waar ik naar op zoek ben ;), indien mogelijk.
- Hoe bereik ik dit doel, indien mogelijk.
Ik d8 dat ik daarmee wel goed had aangegeven wat me wel en niet gelukt is. Maar ik zal de vorige keer duidelijker proberen te zijn :D
Verwijderd schreef op woensdag 24 februari 2010 @ 15:09:
[...]

Dat is alleen niet echt een nette oplossing ;) Je kan beter P/Invokes gebruiken.
Ik heb het nog niet gegoogled omdat ik nog met andere meuk bezig ben maar erm, wat is P/Invokes en waarom is dit beter dan wat eerder voorgesteld is ??

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 24 februari 2010 @ 15:09:
[...]
Dat is alleen niet echt een nette oplossing ;) Je kan beter P/Invokes gebruiken.
Waarom zouden P/Invokes beter zijn? Of je moet doelen op een Windows API call die het sliden voor je afhandelt, maar anders zie ik niet waarom P/Invokes ( waarnaartoe? ) beter zijn.

“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.”


Acties:
  • 0 Henk 'm!

  • ? ?
  • Registratie: Mei 2007
  • Niet online

? ?

Als je Win32 Api SetWindowPos bedoelt, niet doen. We gebruiken bij voorkeur de managed .NET functies.
Een slide-API ken ik niet (of je bedoelt misschien een msn specifieke api?), deel hem anders eens, handig voor ons :P

Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dat is inderdaad waarom ik het vraag. Als er gewoon een managed interface is heeft het de voorkeur om die te gebruiken. Pas als blijkt dat dat problemen oplevert voor de performance zou ik verder kijken.

Dat is natuurlijk een ander verhaal als er inderdaad iets van een "Slide API" zou zijn, die werk uit handen neemt, maar daar ben ik ook niet bekend mee.

“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.”


Acties:
  • 0 Henk 'm!

  • staefke
  • Registratie: December 2003
  • Laatst online: 10-09 10:20

duh ?


Acties:
  • 0 Henk 'm!

  • DanielG
  • Registratie: Oktober 2005
  • Laatst online: 08-09 15:36

DanielG

i = 0x5f3759df - (i>>1); ☠₧ℳ🀪❣

C#:
1
2
[DllImport("user32.dll")]
        private static extern Boolean ShowWindow(IntPtr hWnd,Int32 nCmdShow);

Deze gebruikt (onnodig?) Winapi, het zelf maken met alleen de managed .NET functies zou niet zo moeilijk moeten zijn en is nog leuker ook :P.

http://xyproblem.info/


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)

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


Acties:
  • 0 Henk 'm!

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

Snake

Los Angeles, CA, USA

Woy schreef op woensdag 24 februari 2010 @ 15:27:
[...]

Waarom zouden P/Invokes beter zijn? Of je moet doelen op een Windows API call die het sliden voor je afhandelt, maar anders zie ik niet waarom P/Invokes ( waarnaartoe? ) beter zijn.
Als je in een timer.Ticked event handler zit mag je de main UI niet updaten. Dan zou je dus Invoke gebruiken.

Die P is dus niet nodig :P (dat is voor Interop :) )

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


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Snake schreef op vrijdag 26 februari 2010 @ 14:04:
[...]

Als je in een timer.Ticked event handler zit mag je de main UI niet updaten. Dan zou je dus Invoke gebruiken.

Die P is dus niet nodig :P (dat is voor Interop :) )
P/Invoke heeft natuurlijk niks met WinForms Invoke te maken ;) En Fastman zei ook nergens dat je het in de Timer Elapsed handler moet doen ;)

“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.”


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ja dat klopt, en dankzij RobIII heb ik deze al geimplementeerd :D.
Effe een update: ik heb al met succes de popup events erin gepleurd, wanneer ik gebeld wordt komt het schermpje mooi omhoog, gegevens staan juist in beeld, alles werkt. Nu enkel nog een event creeren voor het sluiten van het venstertje wanneer het gesprek niet opgenomen wordt en de bellende partij ophangt:P Maar dat is los hiervan, want dat is popup.Close(); ;).

allemaal bedankt voor de input!
Pagina: 1