RectF property nicht zugreifbar

SpongeStone

Grünschnabel
Guten Morgen

Ich programmiere gerade an einer benutzerdefinierten Komponente, die ein System.Drawing.RectangleF als Property zur Verfügung stellt.

Wenn Ich meine Komponente nun in eine Formularanwendung einbinde, stosse Ich im Windows Form designer auf ein Problem: Meine RectangleF Propertys sind nicht editierbar, sie werden grau angezeigt.

Über die .designer.vb kann Ich das Property, was nach dem Codegenerator auf eine Ressource verweist, editieren - die neue Dimensionierung wird angenommen.

Warum lässt die IDE mich das nicht im Formdesigner über die Objekteigenschaften konfigurieren?

Ich vermute, dass das RectangleF Objekt das einfach nicht unterstützt, vielleicht könnt Ihr mir ja mehr dazu sagen.

MfG
Sponge
 
Zuletzt bearbeitet:
Hi

Ich hab hier grad kein VS zum ausprobieren.
Aber das Property hat auch einen Setter?!

PS: nicht in der DEsigner-Datei editieren. Das steht nicht für umsonst im Kommentar darüber ;)
 
Ich danke euch für die Antworten, jedoch...

Ich hab hier grad kein VS zum ausprobieren.
Aber das Property hat auch einen Setter?!
Ja, hat es, ich habe den Quellcode unten mal mitgepostet, das hilft vielleicht weiter.

PS: nicht in der DEsigner-Datei editieren. Das steht nicht für umsonst im Kommentar darüber ;)
Warum nicht? So fern man weiss, oder glaubt, zu wissen, was man tut...
Nagut, die IDE wird schon Ihren Grund haben, warum Sie mich das nicht Direkt editieren lässt, aber dafür diskutieren wir ja hier. :)

Ev. ReadOnly Attribute gesetzt?
Oder der Modifier des Setters auf internal?
Nein, Ich habe keine zusätzlichen Attribute geändert.
Ist es etwa angemessen, sowas bei der Deklaration immer anzugeben? VB ist da doch sehr hilfsbereit, und verwaltet die Propertys automatisch als ReadOnly, sofern man nur einen Getter angibt.
Gehört das etwa zum guten Programmierstil, sowas manuell anzugeben?
[edit]*hust* Ok, Ich hab mich geirrt, VB macht das garnicht automatisch - schein Ich geträumt zu haben.[/edit]

Übrigens:
Wenn Ich ein System.Drawing.Rectangle anstatt des System.Drawing.RectangleF verwende, kann ich die Parameter aufklappen und editieren.



Um mögliche Unklarheiten, was Ich gemacht oder nicht gemacht haben könnte, zu beseitigen.

UserControl1.vb:
Code:
Public Class UserControl1

   public property dimension as System.Drawing.RectangleF
      set (byval n as System.Drawing.RectangleF)
         newDimension = n
      end set
      get
         return newDimension
      end get
   end property

   'public property dimensionS as RectangleF2
   '   set (byval n as RectangleF2)
   '      newDimension = new System.Drawing.RectangleF(n.L,n.T,n.W,n.H)
   '   end set
   '   get
   '      dim r as RectangleF2
   '      r.L = newDimension.Left
   '      r.T = newDimension.Top
   '      r.W = newDimension.Width
   '      r.H = newDimension.Height
   '      return r
   '   end get
   'end property

   'public structure RectangleF2
   '   dim L as Double
   '   dim T as Double
   '   dim W as Double
   '   dim H as Double
   'end structure

   dim newDimension as System.Drawing.RectangleF = new System.Drawing.RectangleF(0!,50!,100!,100!)

   Private Sub Button1_Click( ByVal sender As System.Object,  ByVal e As System.EventArgs) Handles Button1.Click
      Button1.Location = new System.Drawing.point(newDimension.Left,newDimension.Top)
      Button1.Size = new System.Drawing.Size(newDimension.Height,newDimension.Width)
   End Sub
End Class
Dieses Beispielobjekt ziehe Ich nun auf eine Formularanwendung.
o.g. Problematik entsteht.

Ich hoffe Ihr seit ein wenig schlauer als Ich und könnt mir zu einer Lösung verhelfen.

MfG
Sponge
 
Zuletzt bearbeitet:
RectangleF besitzt keinen TypConverter deshalb kannst du im Prop. Grid nicht auf diese Eigenschaft draufzugreifen.

Nachtrag:
BIn mir grad nicht mehr so sicher obs wirklich da dran liegt aber ne andere Erklärung fält mir erstmal nicht ein.
 
Zuletzt bearbeitet:
Hi zusammen

@Spyke
ja das könnte sein. Einen eigenen TypeConverter zu schreiben sollte jedoch kein Hindernis darstellen

@SpongeStone
Darf ich mal fragen, wieso ausgerechnet RectangleF und nicht Rectangle?
 
Danke euch beiden

@SpongeStone
Darf ich mal fragen, wieso ausgerechnet RectangleF und nicht Rectangle?
Das kann Ich dir sagen.
In der Komponente verwende Ich das Objekt, um skalierungen in Prozent anzugeben, da Ich mehrere Schichten, deren Skalierungen jedoch frei konfigurierbar seien sollen, in eine Picturebox zeichne. RectangleF ist da einfach genauer.
Sicher ist das nicht der elleganteste Weg. Besser wäre es vermutlich gewesen, ein Objekt für jede Schicht anzulegen, das hat sich im Verlaufe der Entwicklung jedoch nicht ergeben. (Die erste Version hat zum "Zeichnen" von Quadraten noch ein Array aus gefärbten Labels benutzt !.. )
Wie man sieht, muss Ich mich noch einarbeiten, das ist alles garnicht so einfach.

@Spyke Danke,
Ich habe eben schnell dazu gegoogelt - schaut vielversprechend aus.
Das schau Ich mir aber dann morgen in meinem Ausbildungsbetrieb nochmal genauer an.

Bis dahin
Gute Nacht!

p.s. (10.02.09)
Ob's hilft, kann Ich noch nicht sagen, ist gerade alles ein wenig stressig.
Werd mich dann hier aber nochmal melden. :)

MfG
Elmo Elbrecht
 
Zuletzt bearbeitet:
Zurück