none
Entfernen von Controls in Excel RRS feed

  • Frage

  • Hallo,

    um dynamisch Controls zu einer Office anwendung hinzuzufügen habe ich folgendes gefunden:

    http://msdn.microsoft.com/en-us/library/b86d6w07%28v=VS.100%29.aspx

    Nur würd ich diese auch gerne wieder dynamisch entfernen.

    Um ComboBoxen zu löschen habe ich mir folgendes mal überlegt, funktioniert aber nicht.

     

    foreach (ComboBox item in Globals.Tabelle2.Controls.OfType<ComboBox>())
    {
           MessageBox.Show(item.Name);
    }
    


    Ich kann die Controls nicht ansprechen, was mache ich da falsch oder wie geht´s richtig?

    Grüße

     

     

     

    Dienstag, 13. September 2011 10:28

Antworten

  • Object ob = Globals.Tabelle2.OLEObjects("30F6721B53300634FD939BD630B61B83BD4933");
    
    Microsoft.Office.Interop.Excel._OLEObject ole = (Microsoft.Office.Interop.Excel._OLEObject)ob;
    
    ole.Delete();
    


    Grüße

     

    • Als Antwort markiert sleepy007 Donnerstag, 15. September 2011 07:04
    Donnerstag, 15. September 2011 07:03

Alle Antworten

  • Hallo Katrin,
    Ich habe folgenden Code zum Combobox-Löschen bei mir ausprobiert und es hat geklappt.
    Umgebung:
    -      Windows 7
    -      Office 2010 SP1
    -      Visual Studio 2010
    VS Projekt:
    -      Excel 2010 Workbook
    Code:
            private void Sheet1_Startup(object sender, System.EventArgs e)
            {
                Microsoft.Office.Tools.Excel.Controls.ComboBox cmb1;
                cmb1 = this.Controls.AddComboBox(this.get_Range("C5", missing), "cmb1");
                cmb1 = this.Controls.AddComboBox(this.get_Range("C6", missing), "cmb2");
                cmb1 = this.Controls.AddComboBox(this.get_Range("C7", missing), "cmb3");
                cmb1 = this.Controls.AddComboBox(this.get_Range("C8", missing), "cmb4");
                cmb1 = this.Controls.AddComboBox(this.get_Range("C9", missing), "cmb5");
    
                MessageBox.Show("Comboboxes in place");
                for (int i = this.Controls.Count; i >= 1; i--)
                {
                    cmb1 = (Microsoft.Office.Tools.Excel.Controls.ComboBox)this.Controls[i - 1];
                    cmb1.Delete();
                }
                MessageBox.Show("Comboboxes deleted");
    
            }
    

     
     
    Grüße,
    Bogdan

    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt
    Mittwoch, 14. September 2011 12:16
    Moderator
  • Hat keiner eine Idee,

    die eingefügten ComboBoxen sind wohl activeX Elemente.

    Ich habe mal die *.xlsx entpackt und finde den Eintrag:

     
    <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
    - <ax:ocx ax:classid="{A37BBB42-E8C1-4E09-B9CA-F009CE620C08}"
     ax:persistence="persistPropertyBag"
    xmlns:ax="http://schemas.microsoft.com/office/2006/activeX"
     xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"> <ax:ocxPr ax:name="RawObjectTypeName" ax:value="System.Windows.Forms.ComboBox" /> <ax:ocxPr ax:name="RawObjectAssemblyName"
    ax:value="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <ax:ocxPr ax:name="RawObjectAssemblyPath" ax:value="" /> <ax:ocxPr ax:name="Cookie" ax:value="30F6721B53300634FD939BD630B61B83BD4933" /> <ax:ocxPr ax:name="ControlInfo_cb" ax:value="0" /> <ax:ocxPr ax:name="ControlInfo_hAccel" ax:value="0" /> <ax:ocxPr ax:name="ControlInfo_cAccel" ax:value="0" /> <ax:ocxPr ax:name="ControlInfo_dwFlags" ax:value="0" /> <ax:ocxPr ax:name="MiscStatusBits" ax:value="0" /> <ax:ocxPr ax:name="Sizel_cx" ax:value="1402" /> <ax:ocxPr ax:name="Sizel_cy" ax:value="556" /> <ax:ocxPr ax:name="IsDynamic" ax:value="0" /> </ax:ocx>


    Leider kann ich aber auf die ComboBox nicht per ProgrammCode zugreifen und löschen. (VS2010, C#)

    Grüße

     

     

    • Bearbeitet sleepy007 Mittwoch, 14. September 2011 14:18
    Mittwoch, 14. September 2011 12:17
  • Hallo Bogdan,

    ich krieg die Fehlermeldung:

    Das Objekt des Typs "Microsoft.Office.Tools.Excel.NamedRangeImpl" kann nicht in Typ "Microsoft.Office.Tools.Excel.Controls.ComboBox" umgewandelt werden.

    Grüße

     

    Mittwoch, 14. September 2011 12:38
  • Object ob = Globals.Tabelle2.OLEObjects("30F6721B53300634FD939BD630B61B83BD4933");
    
    Microsoft.Office.Interop.Excel._OLEObject ole = (Microsoft.Office.Interop.Excel._OLEObject)ob;
    
    ole.Delete();
    


    Grüße

     

    • Als Antwort markiert sleepy007 Donnerstag, 15. September 2011 07:04
    Donnerstag, 15. September 2011 07:03
  • Vielen Dank Kartin fuer die gepostete Loesung!
    Ich bin gerne bei den Foren. Es kommt von Herzen. Es wird aber keine implizite oder sonstige Garantie für die geposteten Antworte / Informationen gewährt. Hier auch die Forenregeln.
    Dienstag, 20. September 2011 07:52
    Moderator