none
Form1.Size nicht verfügbar RRS feed

  • Frage

  • c# 2010 express

     

    Es soll die Breite des Objektes Form1 abgefragt werden. Wenn Form1. im Programm angegeben wird, taucht im eingeblendeten Eigenschaftenmenü NICHT die Eigenschaft Size auf. Diese ist natürlich im normalen Eigenschaftenfenster vorhanden.

    Eigentlich müßte

    Form1.Size = new Size(100,100);

    und

    if (Form1.Size.Width > 100) ...

    funktionieren, kann aber aus oben beschriebenem Grund nicht ausgewählt werden (und geht auch nicht).

     

    Wie kann denn sonst programmtechnisch die Größe (Breite) des Objektes Form1 abgefragt werden?

    Danke

    Freitag, 10. Juni 2011 13:09

Antworten

  • Hallo,

    naja, es hängt schon davon ab, wo Du auf die Size Eigenschaft zugreifen möchtest -
    ich bin von einem Zugriff von außen ausgegangen.

    Innerhalb von der Klasse (hier Form1) greift man in einer Methode über this (
    oder über base, weil es sich hier um eine geerbte Eigenschaft handelt):

    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
      {
        public Form1()
        {
          InitializeComponent();
    
          this.Size = new Size(100, 200);
          // oder da in der Basisklasse definiert:
          base.Size = new Size(100, 200);
        }
      }
    }
    
    

    this ist die Standardeinstellung in einer Instanz-Methode, wenn Du nichts weiter angibst.

    Wenn Du auf dem Formular einen Button hast, ist der auf gleiche Weise verfügbar.

    Ich empfehle Dir, das Galileo Online-Buch mal näher anzuschauen,
    dort werden solche Grundlagen umfassender erläutert.

    Gruß Elmar

    • Als Antwort markiert Waltereit Freitag, 10. Juni 2011 16:05
    Freitag, 10. Juni 2011 15:39

Alle Antworten

  • Hallo,

    vermutlich weil Du das versuchst, ohne Instanz der Klasse zu erstellen.
    Um die Größe eines Formulars zu verändern, musst Du zunächst eine Instanz erstellen:

          Form1 form = new Form1();
          
          form.Size = new Size(100, 200);
          // oder auch
          form.Width = 100;
          form.Height = 200;
    
    
    Ohne eine Instanz werden Dir nur die statischen Methoden und Eigenschaften der Klasse angezeigt.
    Siehe: Klassen (C#-Programmierhandbuch)
    Für weitere Grundlagen auch http://openbook.galileocomputing.de/visual_csharp/visual_csharp_03_001.htm

    Gruß Elmar

    Freitag, 10. Juni 2011 14:24
  • Hallo

    Danke, aber das kann nicht das Problem sein. Wenn ich das so mache, kommt die Fehlermeldung:

    Fehler    1    "Form1": Membernamen dürfen nicht mit dem Namen des sie einschließenden Typs identisch sein. 

     

    Das erscheint mir auch sinnvoll zu sein, denn immerhin existiert das Objekt Form1 ja zu diesem Zeitpunkt schon, es ist doch das leere Grundobjekt im Designer.

     

    In der oben angegebenen Hilfe wird folgendes sinngemäß empfohlen:

     public partial class Form1 : Form
        {
            // globale Variablen
            Form FormZ = new Form();
            Form FormZ = Form1;
            ....

    Das ergibt aber die Fehlermeldung:
    Fehler    1    "Zeiger.Form1" ist ein(e) "Typ", wird aber wie ein(e) "Variable" verwendet. 

     

    Der Fehler scheint woanders zu liegen. Bei jedem beliebigen Objekt, zB einem button, kann ich beim Programmieren auf alle eigenschaften zugreifen, wie zB button1.text = "Hallo";   Warum geht das nicht für Form1.Size = new Size(100,100);? Wie geht das stattdessen?

    Vielen Dank

     

    Freitag, 10. Juni 2011 15:15
  • Hallo,

    naja, es hängt schon davon ab, wo Du auf die Size Eigenschaft zugreifen möchtest -
    ich bin von einem Zugriff von außen ausgegangen.

    Innerhalb von der Klasse (hier Form1) greift man in einer Methode über this (
    oder über base, weil es sich hier um eine geerbte Eigenschaft handelt):

    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
      {
        public Form1()
        {
          InitializeComponent();
    
          this.Size = new Size(100, 200);
          // oder da in der Basisklasse definiert:
          base.Size = new Size(100, 200);
        }
      }
    }
    
    

    this ist die Standardeinstellung in einer Instanz-Methode, wenn Du nichts weiter angibst.

    Wenn Du auf dem Formular einen Button hast, ist der auf gleiche Weise verfügbar.

    Ich empfehle Dir, das Galileo Online-Buch mal näher anzuschauen,
    dort werden solche Grundlagen umfassender erläutert.

    Gruß Elmar

    • Als Antwort markiert Waltereit Freitag, 10. Juni 2011 16:05
    Freitag, 10. Juni 2011 15:39
  • Vielen Dank
    Freitag, 10. Juni 2011 16:05