vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: Constant Expression is required 
Autor: Manfred X
Datum: 09.07.11 09:09

Hallo!

Überladungen von Routinen und optionale Parameter bei Routinen
sind meiner Ansicht nach zwei verschiedene Programmier-Techniken,
die sich nicht gegenseitig ersetzen. Optionale Parameter kann
man einfach auslassen (=Vorgabewert), wenn es mehrere solcher Parameter
gibt. Auch die IDE-Unterstützung ist anders.

MfG
Manfred

Beitrag wurde zuletzt am 09.07.11 um 09:12:25 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Constant Expression is required 
Autor: Caddy
Datum: 08.07.11 12:49

Ich habe folgende Methode geschrieben:
 Public Sub ControlColor(ByVal c As Control, ByVal back As Color, Optional _
   ByVal fore As Color = Color.Black)
        c.BackColor = back
        c.ForeColor = fore
    End Sub
Nun meckert er bei Oclor.Black mit folender Meldung
Constant Expression is required
Was bedeutet das? Warum will er dort eine Konstante haben?

Gruss Caddy

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorDaveS (Moderator)
Datum: 08.07.11 13:37

Color.Black ist eine (Shared) Eigenschaft der Color-Klasse und keine Konstante, d.h., es geht nicht. Mach's so (optionale Parameter sind ja eh schlechter Stil)

    Public Sub ControlColor(ByVal c As Control, ByVal back As Color)
        c.BackColor = back
        c.ForeColor = Color.Black
    End Sub
 
    Public Sub ControlColor(ByVal c As Control, ByVal back As Color, ByVal fore _
      As Color)
        c.BackColor = back
        c.ForeColor = fore
    End Sub

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Manfred X
Datum: 09.07.11 06:51

Hallo!

''' <summary>Festlegung der Farben eines Controls</summary>
''' <param name="c">Das Control</param>
''' <param name="back">Hintergrundfarbe</param>
''' <param name="fore">optional Vordergrundfarbe (sonst: schwarz)</param>
Public Sub ControlColor(ByVal c As Control, ByVal back As Color, _
                        Optional ByVal fore As Color = Nothing)
    c.BackColor = back
    If fore = Nothing Then
       c.ForeColor = Color.Black
    Else
       c.ForeColor = fore
    End If
End Sub
MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorDaveS (Moderator)
Datum: 09.07.11 07:35

Schlechter Stil und Ineffizienz. Raffiniert.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Manfred X
Datum: 09.07.11 07:51

Hallo!

Ineffizient?

Das Problem bei einer derartigen Nutzung von Structures
als optionale Parameter besteht darin, dass "Nothing" den
Standard-/Initial-Wert der Struktur repräsentiert.
Dieser Wert wird ggf. durch den internen "Default" überschrieben.

Gibt es einen anderen Weg, um Structures als optionale
Parameter zu nutzen?

MfG
Manfred

Beitrag wurde zuletzt am 09.07.11 um 07:52:08 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorRalfE (Moderator)
Datum: 09.07.11 09:00

Man kann mehrere Überladungen anbieten. Im einfachsten Fall rufen die einfachen Varianten die umfangreichste Methode auf und übergeben die Standardwerte.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorRalfE (Moderator)
Datum: 09.07.11 09:40

Klar sind es nicht die selben Techniken, aber die Wirkung ist sehr ähnlich, denn beide erlauben es mir, unterschiedliche viele Argumente zu übergeben. Bei optionalen Parameter sehe ich den Default-Wert (zumindest durch VS), bei Überladungen nicht. Dieser kann dokumentiert sein (entweder in den XML-Dokutags, die VS auch anzeigt, oder in einer separaten Dokumentation).
Auf der anderen Seite finde ich verschiedene Überladungen einfacher zu erfassen als eine Methode, die von 8 Parametern nur 3 benötigt, da der Rest Optional ist.

Um bei deinem Beispiel für Caddy zu bleiben: Bei zwei Überladungen könnte die einfache die komplexere aufrufen und letztere weißt einfach die Werte. Ich brauche dafür kein If, wie in deinem Beispiel, wodurch der Code etwas einfacher ist. Verzweigungen möchte ich für die Logik verwenden und nicht, um eine Sprachanforderung (hier konstanter Ausdruck für optionalen Parameter) zurecht zu biegen.
Richtig unübersichtlich wird es imho, wenn der Standardwert ein valides Argument ist - wie tut man dann entscheiden zwischen Standardwert und Wert für optionalen Parameter?

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorDaveS (Moderator)
Datum: 09.07.11 09:45

Bei jedm Aufuf muss die If-Bedingung ausgewerte werden

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Caddy
Datum: 09.07.11 11:40

Ich wollte das mit den Optionalen Parametern nur mal ausprobieren und bin dann darauf gestossen.

Aber mit Überladung gäb ich bei meinem überdachten Problem nicht weiter..wenn ich z.B. mehrere Parameter des selben Typs über gebe:

z.B.
Public Sub test( )
Button.Left=0
Button.Top=0
Button.Width=0
Button.Height=0
End Sub
 
Public Sub test( ByVal x as Integer)
Button.Left=x
Button.Top=0
Button.Width=0
Button.Height=0
End Sub
 
Public Sub test( ByVal x as Integer,ByVal y as Integer)
Button.Left=x
Button.Top=y
Button.Width=0
Button.Height=0
End Sub
 
Public Sub test( ByVal x as Integer, ByVal y as Integer, ByVal w as Integer)
Button.Left=x
Button.Top=y
Button.Width=w
Button.Height=0
End Sub
 
Public Sub test( ByVal x as Integer, ByVal y as Integer, ByVal w as Integer, _
  ByVal h as Integer)
Button.Left=x
Button.Top=y
Button.Width=w
Button.Height=h
End Sub
Was mach ich in dem Fall ich habe z.B. nur 200 und 400. Dann geht er in dei 3. Sub rein und füllt sie mir mit falschen Werten, wenn 200 für x stehen soll und 400 für w.

Denn bei einer weiteren Überladung wie:

Public Sub test( ByVal x as Integer,ByVal w as Integer)
 
End Sub
würde er doch meckern. Abgesehen davon wüßte er nicht welche er jetzt nehmen soll.

Gruss Caddy

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Manfred X
Datum: 09.07.11 12:00


Public Sub SetValues(ByVal ctl As Control, _
               Optional ByVal pTop As Integer = 0,
               Optional ByVal pLeft As Integer = 0, _
               Optional ByVal pWidth As Integer = 100, _
               Optional ByVal pHeight As Integer = 100)
     Try
        With ctl
           .Top = pTop : .Left = pLeft
           .Width = pWidth : .Height = pHeight
        End With
     Catch
        'nicht nachmachen
     End Try
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Caddy
Datum: 09.07.11 12:17

Hi Manfred,

Danke so habe ich es ja auch gelöst, aber ihr habt euch ja drum gestritten, dass man Optional nicht nutzen sollte....Darum ging es mir

Gruss Caddy

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorFZelle (Moderator)
Datum: 09.07.11 12:38

Da hast du aber grundsätzlich etwas nicht verstanden.
Warum solltest Du so eine weitere Funktion schreiben wollen?

Auch wäre die Implementation so viel zu fehleranfällig.
Public Sub test( )
test(0,0,0,0)
End Sub
 
Public Sub test( ByVal x as Integer)
test(x,0,0,0)
End Sub
 
Public Sub test( ByVal x as Integer,ByVal y as Integer)
test(x,y,0,0)
End Sub
 
Public Sub test( ByVal x as Integer, ByVal y as Integer, ByVal w as Integer)
test(x,y,w,0)
End Sub
 
Public Sub test( ByVal x as Integer, ByVal y as Integer, ByVal w as Integer, _
  ByVal h as Integer)
Button.Left=x
Button.Top=y
Button.Width=w
Button.Height=h
End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorDaveS (Moderator)
Datum: 09.07.11 15:56

Niemand hat sich darum gestritten. Stil ist ja bekanntlich etwas wozu es unterschiedliche Meinungen gibt. Ich würde dann schauen wer anscheinend mehr überzeugende Erfahrung hat, und wer vielleicht eher "clever" sein will. Bei deiner Frage zu Color ging es aber gar nicht, ohne dafür mit zusätzlichem Code zu kompensieren. Control-Einstellungen mittels vieler Subs zu machen scheint mir eh keine gut durchdachte Lösung zu sein.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Maas
Datum: 09.07.11 16:08

Mit C# 4.0 wurde ja auch dort der Optional Parameter eingeführt und C# ist ja nun im Gegensatz zu VB nicht dafür bekannt den Fokus auf Programmierfreundlichkeit/-faulheit zu setzen. Fragt sich halt nur, für welchen Anwendungszweck das dann gedacht war, aber irgendeinen Sinn wird es wohl schon machen (oder?).

Maas
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorRalfE (Moderator)
Datum: 09.07.11 16:26

Die benannten und optionalen Parameter wurden primär für das Szenario COM-Interop eingeführt. Über COM Office zu automatisieren ist nicht unüblich. Nur z.B. die Save-Methode von Word hat über 20 Parameter, wovon bis auf einer (Dateiname) alles optional ist. Man musste aber immer die jeweiligen Standardwerte angeben.

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorDaveS (Moderator)
Datum: 09.07.11 16:58

Wie er sagt.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Maas
Datum: 09.07.11 17:50

Wie? Wer? Was? RalfE?

Maas
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorDaveS (Moderator)
Datum: 09.07.11 17:55

Ja. In englischsprachigen Foren schreibt man "This" oder "What he said". Lässt sich doch nicht übetragen?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Maas
Datum: 09.07.11 18:01

War schon richtig, aber ich hab einfach nicht erwartet, dass RalfE's Meinung noch eine Bestätigung braucht. ^^ Aber doppelt hält ja bekanntlich besser.

Maas
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorDaveS (Moderator)
Datum: 09.07.11 18:06

Naja, brauchte schon nicht, aber du hast ja mich gefragt

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: Caddy
Datum: 10.07.11 06:49

Naja meine Frage ist ausgiebig beantwortet..ich nutze, dass wir man "sinnvollsten" für meine Zwecke erscheint ob mehrfach Deklarationen, oder Optionale Parameter...Ich bin grade in einer ExperimentierPhase da man mir sagte, ich sollte mich mal in die Materie Vb.net einlesen. Ob das was ich tue schlechter Stil ist, ist erstmal zweitrangig..Es erfüllt für mich erstmal meine Zweck und ob die eine oder andere Methode später besser ist, für meine Zwecke, kann ich dann ja wohl selbst entscheiden:-D

Aber diskutiert ihr ruhig weiter über den Stil einer Rangehensdweise...Vielleicht kann ich da das eine oder andere noch lernen aus eurer Argumentation...

Danke aber an die Beantwortung meiner eigentlichen Frage.. s.o.

Gruss Caddy

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: ModeratorFZelle (Moderator)
Datum: 10.07.11 11:32

Du solltest dich nicht in VB.NET und seine (un)möglichkeiten einarbeiten, sondern Grundlagen von OOP und .NET erarbeiten, das ist viel Sinnvoller als zu versuchen etwas irgendwie machen zu wollen und zu schauen ob man das dann auch genauso irgendwie mit VB.NET umsetzen kann.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Constant Expression is required 
Autor: DotNetErbse
Datum: 12.07.11 11:36

he, Caddy,

Du kannst Dir auch eine Klasse schreiben, die alle für Controls relevanten Werte übernimmt, der Du dann Dein(e) Control(s) übergeben kannst und die Dir dann die Werte ins Control schreibt.
Somit kannst Du mehrere Controls mit einmal "designen"

Mit freundlichen Gr??en
DotNetErbse


[Es hei?t Paket und nicht Packet, auch wenn Standard augenscheinlich von Standar(t)e kommt,hei?t es dennoch Standar(d)]

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel