[c#] GroupBox FlatStyle.System breekt bepaalde eventhandlers

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

  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Weer eens een gek probleem. Ik heb een aantal GroupBoxes op een form. Nu heb ik daar een DoubleClick event aan gehangen om ze bij dubbelklikken te minimalizeren en maximalizeren. Dat werkt allemaal mooi en wel totdat ik de FlatStyle van de GroupBoxes instel op System. Dan mag ik dubbelklikken op de groupboxes tot ik een ons weeg, de DoubleClick eventhandlers geven geen teken meer van leven. Idem met een Click, MouseEnter,... eventhandler.

Een Resize eventhandler daarentegen werkt nog wel.

Verander ik de FlatStyle weer naar een andere niet-System optie (bv Standard), dan werkt het weer wel. Ik ervaar dit effect enkel bij GroupBoxes. Een label of button in FlatStyle.System blijft alle eventhandlerfunctionaliteit behouden.

Helaas wil ik wel FlatStyle.System blijven gebruiken opdat ik XP-stijl controls krijg in combinatie met een manifest bestand.

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.


  • whoami
  • Registratie: December 2000
  • Laatst online: 17:16
Een groupbox maximaliseren ? :?

Ben je zeker dat je handlers nog aan je events hangen ?

Trouwens, een groupbox heeft geen DoubleClick event.

Als je gebruik maakt van .NET 1.1, heb je geen manifest nodig om Xp style te krijgen.

[ Voor 15% gewijzigd door whoami op 27-10-2005 14:49 ]

https://fgheysels.github.io/


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

Net snel een testje gedaan en hier werkt het prima!

  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Nou ja, maximalizeren en minimalizeren is misschien wat verkeerd uitgedrukt. Ik wil gewoon als ik erop dubbelklik dat de hoogte ervan teruggebracht wordt naar 24 (originele afmeting wordt bewaard). De andere groupboxes op de form verschuiven mee zodat er geen gaten ontstaan. Dubbelklik ik nogmaals op de 'geminimalizeerde' groupbox, dan vouwt deze weer uit naar originele grootte en verschuiven de andere groupboxes weer.

Maar zoals ik al zei, dat werkt allemaal al perfect, zolang ik de FlatStyle maar niet op Sytem zet.

Overigens heeft een GroupBox hier toch wel een Click en DoubleClick event. En als ze er niet zijn, dan is het waarschijnlijk magie maar het werkt hier gewoonweg :)

Bijvoorbeeld:
C#:
1
2
3
4
5
6
7
...
this.groupBoxTest.DoubleClick += new EventHandler(groupBox_DoubleClick);
...
private void groupBox_DoubleClick(object sender, EventArgs e)
{
    MessageBox.Show("Hello World!");
}
werkt pefect zolang de FlatStyle niet op Systeem staat.
whoami schreef op donderdag 27 oktober 2005 @ 14:45:
Als je gebruik maakt van .NET 1.1, heb je geen manifest nodig om Xp style te krijgen.
Kun je dit even kort toelichten?
questa schreef op donderdag 27 oktober 2005 @ 14:52:
Net snel een testje gedaan en hier werkt het prima!
Dat is wel gek. Als ik hier een nieuwe WindowsApplication maak, er één groupBox opzet met DoubleClick eventhandler en FlatStyle.System, dan werkt de eventhandler al niet meer...

Voor de duidelijkheid even de complete code van zulk een testprojectje:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Test008
{
    /// <summary>
    /// Summary description for Form1.
    /// </summary>
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.GroupBox groupBox1;
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.Container components = null;

        public Form1()
        {
            //
            // Required for Windows Form Designer support
            //
            InitializeComponent();

            //
            // TODO: Add any constructor code after InitializeComponent call
            //
        }

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if (components != null) 
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }

        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.SuspendLayout();
            // 
            // groupBox1
            // 
            this.groupBox1.FlatStyle = System.Windows.Forms.FlatStyle.System;
            this.groupBox1.Location = new System.Drawing.Point(24, 32);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(224, 120);
            this.groupBox1.TabIndex = 0;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "groupBox1";
            this.groupBox1.Click += new System.EventHandler(this.groupBox1_Click);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 271);
            this.Controls.Add(this.groupBox1);
            this.Name = "Form1";
            this.Text = "Form1";
            this.ResumeLayout(false);

        }
        #endregion

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() 
        {
            Application.Run(new Form1());
        }

        private void groupBox1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("test");
        }
    }
}
Ik mag klikken op de groupbox zoveel ik wil, er gebeurt niets. Verander ik ...FlatStyle.System naar bv ...FlatStyle.Standard dan werkt het wel.

[ Voor 60% gewijzigd door mahi op 27-10-2005 15:05 ]

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

mahi schreef op donderdag 27 oktober 2005 @ 14:58:
Kun je dit even kort toelichten?
Application.EnableVisualStyle(), kijk daar maar is naar :)

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:16
questa schreef op donderdag 27 oktober 2005 @ 15:10:
[...]


Application.EnableVisualStyle(), kijk daar maar is naar :)
Idd

Hmm, idd, een GroupBox heeft wel een double-click event. Maar ik vond 'm niet terug in de property window.

Echter, als ik dit doe:
code:
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, System.EventArgs e)
{
            groupBox1.FlatStyle = FlatStyle.System;
            groupBox1.DoubleClick += new EventHandler(groupBox1_DoubleClick);
}

private void groupBox1_DoubleClick(object sender, EventArgs e)
{
       MessageBox.Show ("ok");
}


Dan werkt die doubleclick ook niet. Zeer vreemd inderdaad; FlatStyle.Standard, dan werkt het weer wel. Een bugje in .NET ?

https://fgheysels.github.io/


  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Ahja, Application.EnableVisualStyles() kende ik eigenlijk al. Maar daar heb ik vroeger vaak problemen mee gehad. Vooral bij MDI-programma's werkte het meestal niet (met Google kom je nog velen tegen die daarop gebotst zijn). Op aanraden van iemand op codeproject ben ik dan maar overgeschakeld op de manifest file en heb eigenlijk nooit meer problemen gehad, behalve nu met die System.

Overigens lost het niets op... Ook met Application.EnableVisualStyles() dienen de controls op FlatStyle.System te staan voor de XP-look. En dus (net getest) zit ik met hetzelfde probleem.
whoami schreef op donderdag 27 oktober 2005 @ 15:21:
Dan werkt die doubleclick ook niet. Zeer vreemd inderdaad; FlatStyle.Standard, dan werkt het weer wel. Een bugje in .NET ?
Op een label werkt het dan weer wel...

[ Voor 20% gewijzigd door mahi op 27-10-2005 15:29 ]

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

whoami schreef op donderdag 27 oktober 2005 @ 15:21:
Hmm, idd, een GroupBox heeft wel een double-click event. Maar ik vond 'm niet terug in de property window.
Denk dat zo'n 20% van de events helemaal niet in de Propertie window staan. Heel vervelend!

  • whoami
  • Registratie: December 2000
  • Laatst online: 17:16
mahi schreef op donderdag 27 oktober 2005 @ 15:25:
Ahja, Application.EnableVisualStyles() kende ik eigenlijk al. Maar daar heb ik vroeger vaak problemen mee gehad.
Deed je dan ook een DoEvents daarna ?

code:
1
2
Application.EnableVisualStyles();
Application.DoEvents();

https://fgheysels.github.io/


  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Voor zover ik me herinner wel, maar da's ondertussen weeral even geleden. Hoe dan ook, ik was tevreden met de manifest file methode. Maar in dit geval maakt het niet uit of ik de manifest methode gebruik of de EnableVisualStyles: Het is de FlatStyle.System (die in beide gevallen nodig is) die het probleem veroorzaakt.

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.


  • pjvandesande
  • Registratie: Maart 2004
  • Laatst online: 16-04 11:36

pjvandesande

GC.Collect(head);

whoami schreef op donderdag 27 oktober 2005 @ 15:41:
[...]

Deed je dan ook een DoEvents daarna ?

code:
1
2
Application.EnableVisualStyles();
Application.DoEvents();
Ja, anders kun je nog wel is rare tafferelen krijgen later :)

  • mahi
  • Registratie: Juni 2001
  • Laatst online: 03-10-2025

mahi

God bless GoT

Topicstarter
Even een korte update... Ik ben ondertussen overgeschakeld naar VS.NET 2005. Ook hier breekt FlatStyle.System bepaalde eventhandlers. Maar, in VS.NET 2005 kan ik wel de FlatStyle gewoon op Standard instellen en de form wordt weergegeven met XP controls (in 2003 werkt dat enkel bij FlatStyle.System). Bij Standard werken de eventhandlers wel, dus is mijn probleem eigenlijk verholpen :)

A bus station is where a bus stops. A train station is where a train stops... On my desk I have a workstation.

Pagina: 1