Op form blijven labels en buttons achter

Status
Niet open voor verdere reacties.

Buzzy

Gebruiker
Lid geworden
25 sep 2009
Berichten
37
Hallo,

op mijn form blijven de labels en buttons staan. Zie afbeeldingen. Hoe kan ik dit voorkomen. Nu doe ik elke 500 ms een this.Refresh() maar daarvan gaat het formulier knipperen. Een this.Refresh() na een update van een label of visible = false geeft ook niet het gewenste resultaat. Wie kan mij hiermee helpen.
screen1.jpgscreen2.jpg

Hieronder de code.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Diagnostics;
using System.Timers;
using System.Threading;
using System.IO;
using System.Reflection;
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swcommands;
using SolidWorks.Interop.swconst;
using SolidWorks.Interop.swpublished;
using SolidWorksTools;

namespace Callback_Test 
{
    [ComVisible(true)]
    [ProgId(SWTASKPANE_PROGID)]

    public partial class KoppelingTaskpane : UserControl
    {
        #region variables
        Thread thread;
        private delegate void RefreshGUI();
        private delegate void UpdateGUI();
        private delegate void ChooseGrpbox();
        public static bool UpdateTheGui = false;

        delegate void TextBoxDelegate(string message);
        public SldWorks mSWApplication;
        public int mCookie;
        public SketchManager swSketchMgr;
        public Sketch swSketch;
        public static ISldWorks swApp;
        public ModelDoc2 swModel;
        public static ModelDoc2 model = default(ModelDoc2);
        public ModelDocExtension swModelDocExt;
        public CustomPropertyManager swCustProp;
        string val = "";
        string valout = "";
        bool status;
        public AssemblyDoc swAssembly;
        public BackgroundWorker backgroundWorker1;
        public KoppelingTaskpane mTaskpaneHost;
        public int stop = 0;
        public SwAddin addin;
        public PartDoc doc;
        public static bool groupBox2Visable = false;
        public static bool groupBox1Visable = false;
        public static bool docopen;
        public static bool GotType = false;
        static int i = 0;
        static int w = 0;
        #endregion

        public static string str2 = "1";

        public const string SWTASKPANE_PROGID = "Robin.KoppelingTaskpane2_AddInRobin";
        public delegate void UpdateLabels(string text);
        public bool trui;

        public KoppelingTaskpane()
        {
            InitializeComponent();
            thread = new Thread(new ThreadStart(MyThreadLoop));
            thread.Start();
            ToolTip toolTip1 = new ToolTip();
        }
        private void MyThreadLoop()
        {
            while (true)
            {
                if (GotType == true)
                {
                    GotType = false;
                    w++;
                    this.Hide();
                    GetModelType();
                    this.Show();
                    //RefreshKoppelingTaskpane();
                }
                Grpbox();
                UpdateTheGuiNow2();
                if (UpdateTheGui)
                {
                    GetProps(trui);
                    if (GetProps(trui) == true)
                    {
                        UpdateTheGuiNow();
                        trui = false;
                        //RefreshKoppelingTaskpane();
                    }
                    UpdateTheGui = false;
                    //RefreshKoppelingTaskpane();
                }
                Thread.Sleep(900);
            }
        }

        public void RefreshKoppelingTaskpane()
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new RefreshGUI(RefreshKoppelingTaskpane));
                return;
            } 
            this.Refresh();
        }

        public static bool GetModelType()
        {
            i++;
            try
            {
                model = (ModelDoc2)swApp.ActiveDoc;
            }
            catch
            {
                return false;
            }
            switch (model.GetType())
            {
                case (int)swDocumentTypes_e.swDocPART:
                    {
                        //MessageBox.Show("Part");
                        KoppelingTaskpane.groupBox2Visable = false;
                        KoppelingTaskpane.groupBox1Visable = true;
                        break;
                    }
                case (int)swDocumentTypes_e.swDocASSEMBLY:
                    {
                        //MessageBox.Show("Assembly");
                        KoppelingTaskpane.groupBox2Visable = true;
                        KoppelingTaskpane.groupBox1Visable = false;
                        break;
                    }
                case (int)swDocumentTypes_e.swDocDRAWING:
                    {
                        //MessageBox.Show("Drawing");
                        KoppelingTaskpane.groupBox2Visable = false;
                        KoppelingTaskpane.groupBox1Visable = false;
                        break;
                    }
                default:
                    {
                        //MessageBox.Show("geen document");
                        KoppelingTaskpane.groupBox2Visable = false;
                        KoppelingTaskpane.groupBox1Visable = false;
                        return false; //Unsupported document type
                    }
            }
            GotType = false;
            return true;

        }

        private void Grpbox()
        {
            if (groupBox1Visable == true)
            {
                if (groupBox1.InvokeRequired)
                {
                    groupBox1.Invoke(new ChooseGrpbox(Grpbox));
                    return;
                }
                this.groupBox1.Visible = true;
            }
            else
            {
                if (groupBox1.InvokeRequired)
                {
                    groupBox1.Invoke(new ChooseGrpbox(Grpbox));
                    return;
                }
                this.groupBox1.Visible = false;
            }
            if (groupBox2Visable == true)
            {
                if (groupBox2.InvokeRequired)
                {
                    groupBox2.Invoke(new ChooseGrpbox(Grpbox));
                    return;
                }
                this.groupBox2.Visible = true;
            }
            else
            {
                if (groupBox2.InvokeRequired)
                {
                    groupBox2.Invoke(new ChooseGrpbox(Grpbox));
                    return;
                }
                this.groupBox2.Visible = false;
            }
            if (groupBox1Visable == false && groupBox2Visable == false)
            {
                if (button1.InvokeRequired == true || button2.InvokeRequired == true || button3.InvokeRequired == true)
                {
                    button1.Invoke(new ChooseGrpbox(Grpbox));
                    button2.Invoke(new ChooseGrpbox(Grpbox));
                    button3.Invoke(new ChooseGrpbox(Grpbox));
                    return;
                }
                button1.Visible = false;
                button2.Visible = false;
                button3.Visible = false;
            }
            else
            {
                if (button1.InvokeRequired == true || button2.InvokeRequired == true || button3.InvokeRequired == true)
                {
                    button1.Invoke(new ChooseGrpbox(Grpbox));
                    button2.Invoke(new ChooseGrpbox(Grpbox));
                    button3.Invoke(new ChooseGrpbox(Grpbox));
                    return;
                }
                button1.Visible = true;
                button2.Visible = true;
                button3.Visible = true;
            }
        }
      
        private bool GetProps(bool ja)
        {
            try
            {
                
                swApp = (SldWorks)Activator.CreateInstance(
                Type.GetTypeFromProgID("SldWorks.Application"));
                swModel = swApp.IActiveDoc2;
                swCustProp = swModel.Extension.get_CustomPropertyManager("");
                status = swCustProp.Get4("PartNo", false, out val, out valout);
                Thread.Sleep(50);
                return true;
            }
            catch (System.Exception e)
            {
                MessageBox.Show("geen properties geladen");
                return false;
            }
        }
        private void UpdateTheGuiNow()
        {
            if (textBox1.InvokeRequired)
            {
                textBox1.Invoke(new UpdateGUI(UpdateTheGuiNow));
                return;
            }
            this.textBox1.Text = val;
            this.label2.Text = valout;
        }
        private void UpdateTheGuiNow2()
        {
            if (label3.InvokeRequired)
            {
                label3.Invoke(new UpdateGUI(UpdateTheGuiNow2));
                return;
            }
            label3.Text = DateTime.Now.ToString("MM-dd-yyyy\nHH:mm:ss");
        }

        public void Init(SldWorks app)
        {
            mSWApplication = app;
            //ModelDoc2 testdoc = app.OpenDoc("C:\\Users\\Robin\\Desktop\\Stenenvanger\\000001-1.sldprt", 1);
        }

        private void KoppelingTaskpane_Load(object sender, EventArgs e)
        {
            ToolTip toolTip1 = new ToolTip();
            toolTip1.AutoPopDelay = 5000;
            toolTip1.InitialDelay = 1000;
            toolTip1.ReshowDelay = 500;
            toolTip1.ShowAlways = true;
            toolTip1.SetToolTip(this.textBox1, "My textBox1");

            ToolTip toolTip2 = new ToolTip();
            toolTip2.AutoPopDelay = 5000;
            toolTip2.InitialDelay = 1000;
            toolTip2.ReshowDelay = 500;
            toolTip2.ShowAlways = true;
            toolTip2.SetToolTip(this.label2, "My label2");

            ToolTip toolTip3 = new ToolTip();
            toolTip3.AutoPopDelay = 5000;
            toolTip3.InitialDelay = 1000;
            toolTip3.ReshowDelay = 500;
            toolTip3.ShowAlways = true;
            toolTip3.SetToolTip(this.label3, "My label3");
        }

        #region button click
        public void button1_Click(object sender, EventArgs e)
        {
            UpdateTheGui = true;
            MessageBox.Show("groepbox 1 = " + groupBox1Visable);
            this.BackgroundImage = this.BackgroundImage;
        }

        public void button2_Click(object sender, EventArgs e)
        {
            MessageBox.Show("val = " + val + "\nvalout = " + valout);
        }

        private void button3_Click(object sender, EventArgs e)
        {
            MessageBox.Show(i + " x uitgevoerd\n" + w + " x uitgevoerd\n" + "GB1 is " + groupBox1Visable + "\nGB2 is " + groupBox2Visable);

            RefreshKoppelingTaskpane();
        }
        #endregion

        #region label click

        public void label1_Click(object sender, EventArgs e)
        {

        }

        public void label2_Click(object sender, EventArgs e)
        {

        }

        private void label3_Click(object sender, EventArgs e)
        {

        }
        #endregion

        private void groupBox1_Enter(object sender, EventArgs e)
        {

        }

        private void myGroupBox1_Enter(object sender, EventArgs e)
        {

        }
    }
    }
 
Laatst bewerkt:
Gebruik een TabControl.
Even een manier vinden om die tabs te verbergen (Google) en voìla.
 
Hallo, bedankt voor het alternatief! Eigenlijk ben ik op zoek naar een oplossing. Ik neem aan dat een tabcontrol niet altijd wenselijk is dus zou het zonder ook moeten kunnen. Iemand anders nog ideeën?

Groeten
 
Oké thnx, nu de tabcontrol nog transparent zien te krijgen. Zal nog wel ff een klusje worden... Ga er morgen mee verder stoeien.

Groeten!
 
Je wilt blijkbaar run-time een aantal buttons en labels onzichtbaar maken en andere buttons en labels zichtbaar maken, en dat werkt niet.
Ik heb even een simpel testje gedaan:
Code:
        private void button2_Click(object sender, EventArgs e)
        {
            if (this.button1.Visible == true)
            {
                this.button1.Visible = false;
            }
            else
            {
                this.button1.Visible = true;
            }
        }
Werkt gewoon bij mij. En zonder tabcontrol.
 
Ja dat is correct. Maar ik heb een transparant flowlayoutpanel op het usercontrol. Daarin zitten 2 transparante panels. Op de panels staan labels en textboxen. Wanneer ik panel 1 uitschakel komt panel 2 op de positie van panel 1 maar zie ik panel 2 er ook nog onder staan. Zonder functionaliteit, dus alleen de drawing. Hoe kan ik dit netjes oplossen zonder tabcontrol. Alles is transparant want ik wil je backgroundimage van de usercontrol zichtbaar houden.

Groeten
 
Ik verwacht dat het aan de manier waarop je plugin behandeld wordt aangezien dit normaal geen probleem is.
Had je in een ander topic niet ook al last dit soort dingen bij bepaalde events? Dat je usercontrol zichzelf reset?
Misschien eens kijken op forums / documentatie van SolidWorks?



Of misschien heeft het te maken met de transparantie die je op je panels gebruikt?
Als je eerst de fuctionalteit werkend maakt kun je later de 'looks' aanpassen zoals je het wilt. Dan is het fijn om te weten dat alles werkt, en weet je meteen waar het aan kan liggen als iets plotseling niet meer werkt.


(tegen het knipperen kun je de DoubleBuffered property op true zetten)
 
Hallo, bedankt voor uw antwoord. Ik zal eerst eens proberen om het verhaal werkend te krijgen voordat ik de opmaak verander. Misschien ligt het inderdaad aan de transparantie. Ik houd jullie op de hoogte. Alvast bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan