Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Coding Styles Horror
Gelöschter Benutzer

beantworten | zitieren | melden

public ImageList SmallImageList { get; set; }
 
Declaring Type: System.Windows.Forms.ListView 
Assembly: System.Windows.Forms, Version=4.0.0.0 

-->

...
                if (this.View == View.SmallIcon)
                {
                    this.View = View.LargeIcon;
                    this.View = View.SmallIcon;
                }
...
scrabbl
myCSharp.de - Member



Dabei seit:
Beiträge: 223

beantworten | zitieren | melden

Heute gesehen in einem Projekt eines Kommilitonen....
Erstaunlicherweise funktioniert es, ich frage mich nur ernsthaft wie man sowas hinbekommt, da kriegt man doch einen Knoten im Kopf. Ich habs nun 10min angeschaut und könnte immernoch nicht sagen wie der Ausgangsstring aussehen müsste =)


if(line.Contains("label:"))
{
    line = (line.Substring(line.IndexOf("targetname:"),
                line.IndexOf("label:") - line.IndexOf("targetname:")))
                .Substring((line.Substring(line.IndexOf("targetname:"),
                line.IndexOf("label:") - line.IndexOf("targetname:")))
                .IndexOf("\"") + 1,
                (line.Substring(line.IndexOf("targetname:"),
                line.IndexOf("label:") - line.IndexOf("targetname:")))
                .LastIndexOf("\"") -
                (line.Substring(line.IndexOf("targetname:"),
                line.IndexOf("label:") - line.IndexOf("targetname:")))
                .IndexOf("\"") - 1);

    int target = Int32.Parse(line);
    targets.Add(target);
}
private Nachricht | Beiträge des Benutzers
Spontifixus
myCSharp.de - Member

Avatar #avatar-3052.gif


Dabei seit:
Beiträge: 408
Herkunft: Hannover

throw-catch

beantworten | zitieren | melden

Gestern in einem unserer Projekte entdeckt: Der sog. throw-catch Block!


public void DoSomething() {
    try {
        throw new NotSupportedException("Methode wird nicht unterstützt.");
    
        // Etliche
        // Zeilen
        // auskommentierter
        // Sourcecode

    } catch {
    }
}
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Spontifixus am .
private Nachricht | Beiträge des Benutzers
RedDrago
myCSharp.de - Member



Dabei seit:
Beiträge: 17
Herkunft: Rosenheim

beantworten | zitieren | melden

Dieses kleine Schmankerl habe ich gerade in einem unserer DB Scripte gefunden.

Das ist im übrigen das ganze script und es mach nur das und nicht mehr, aber auch nicht weniger
UPDATE Tabelle1 SET xxx = NULL WHERE xxx IS NULL
private Nachricht | Beiträge des Benutzers
JunkyXL
myCSharp.de - Experte

Avatar #avatar-3234.gif


Dabei seit:
Beiträge: 1732
Herkunft: Ein paar Bytes südlich von string

beantworten | zitieren | melden

Hab soeben etwas idiotisches in meinem eigenen Code entdeckt :D

if (instance.Prop1 != null && instance != null)

Status: Fixed ;)
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3756
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Zitat von JAck30lena

...
                if (this.View == View.SmallIcon)
                {
                    this.View = View.LargeIcon;
                    this.View = View.SmallIcon;
                }
...

Das macht sogar Sinn, kommt in meinem Code auch vor.

Durch den Wechsel auf Large und dann wieder auf SmallIcon wird die Liste neu aufgebaut und richtig dargestellt. Anders geht das leider nicht.

Hintergrund : Ich benutze das Listview um in einem Emailclient die Anhänge mit Symbol anzuzeigen.

Grüße Bernd
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von BerndFfm am .
Attachments
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Sinn macht das nicht. Es erfüllt vielleicht die Funktion, die man haben will aber gut ist so ein Vorgehen dennoch nicht. Besser wäre eine Methode ala "Render" gewesen aber über das wiederholte setzen eines Properties eine Funktion zu erreichen ist Bad Style.
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3756
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Es gibt aber leider keine andere Möglichkeit. Das stand wohl mal als Workaround irgendwo in den Weiten des www.
Wenn man das nicht macht kommt es in der Detailansicht zu Darstellungsfehlern nach dem Löschen von Items.

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
C#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 50

beantworten | zitieren | melden

Ich habe mal irgend wo das gesehen:


public class IrgendeineKlasse
{
  public static readonly bool Value = true;
  public static bool WertvonValue(bool checkInput)
  {
  hier:
    if((checkInput == new Boolean()) != false)
    {
      switch(this.Value.ToString())
      {
        case Boolean.TrueString: return Boolean.Parse(Boolean.TrueString);
        case Boolean.FalseString: return Boolean.Parse(Boolean.FalseString);
        default: 
        if(WertvonValue(Boolean.Parse(Boolean.TrueString)) == Boolean.Parse(Boolean.TrueString))
        {
          return true;
        }
        else
        {
          return false;
        }
      }
    }
    else
    {
      try
      {
         throw new Exception("Bool-Fehler");
      }
      catch(Exception ex)
      {
         goto hier;
      }
  }
}
HILFE!!!
Gruß,
C#ler
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von C#ler am .
In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon
private Nachricht | Beiträge des Benutzers
Floste
myCSharp.de - Member

Avatar #avatar-2376.jpg


Dabei seit:
Beiträge: 1158
Herkunft: Norddeutschland

beantworten | zitieren | melden

Das hat garantiert jemand mit Absicht gemacht. Unerfahrene kommen z.B. in der Regel nicht auf die Idee, statics als readonly zu deklarieren.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Floste am .
Projekte:Jade, HttpSaver
Zum Rechtschreiben gibts doch schon die Politiker. Aber die bauen auch nur mist!
private Nachricht | Beiträge des Benutzers
C#ler
myCSharp.de - Member



Dabei seit:
Beiträge: 50

beantworten | zitieren | melden

Zitat von Floste
Unerfahrene kommen z.B. in der Regel nicht auf die Idee, statics als readonly zu deklarieren.
Doch, ich glaube schon. Das hab ich als Anfänger auch gemacht wenn ich nicht wollte, das ich ausversehen schreibend zugreife. Und ich habe prinzipiell alles static gemacht, wo es keine Fehlermeldung gab.
Kann ich mir schon vorstellen.
Gruß,
C#ler
In theory, there is no difference between theory and practice. But, in practice, there is.

The nice thing about the Java API is that if you don't like it, just wait two minutes — it will change. Doug Lyon
private Nachricht | Beiträge des Benutzers

Moderationshinweis von herbivore (20.04.2011 - 10:47:39):

Es spricht schon einiges dafür, dass der Code konstruiert ist, aber letztlich spielt es keine Rolle.

0815Coder
myCSharp.de - Member



Dabei seit:
Beiträge: 770

beantworten | zitieren | melden

leider kein Witz:


public static class AttributeNames
{
// gekürzt, ca 30 string Konstante, zb:

        /// <summary>
        /// Currency
        /// </summary>
        public const string Currency = "Currency";
     
// und dann:

        /// <summary>
        /// M
        /// </summary>
        public const string M = "M";

        // was ist das? Boss von James Bond?
}
loop:
btst #6,$bfe001
bne.s loop
rts
private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1626
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

Hallo 0815Coder,

hatte in einem früherem Uni-Projekt dasselbe. Fand es geschickt da projektweit sichergestellt wurde dass die Parameter und Cookies immer mit demselben führ ihnen zuständigen Variablen zugewiesen wurden. Diesen Projekt war in JSP, dann habe ich die Variablen sei es in JSP und im Code benutzt. Somit hatte man dann keine Probleme wenn sich eine Variable im Namen mal ändern sollte.
Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp
private Nachricht | Beiträge des Benutzers
0815Coder
myCSharp.de - Member



Dabei seit:
Beiträge: 770

beantworten | zitieren | melden

Oh, mit der Klasse und 30 konstanten Strings hab ich kein Problem.

Aber mit der Code doku...


        /// <summary>
        /// M
        /// </summary>

Zumindest der Name der Konstanten könnte auch sprechender sein.
loop:
btst #6,$bfe001
bne.s loop
rts
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

beantworten | zitieren | melden

Zitat von JAck30lena


public new void Foo()
{
  BaseClass.Foo();
}

Hallo JAck30lena,

ich verstehe die Problematik nicht ganz. Stellt das nicht eine saubere Möglichlichkeit dar das Gesetz von Demeter einzuhalten?

Gruß,
Jack
private Nachricht | Beiträge des Benutzers
xxMUROxx
myCSharp.de - Member

Avatar #avatar-3236.jpg


Dabei seit:
Beiträge: 1626
Herkunft: Südtirol/Italien

beantworten | zitieren | melden

Hallo Jack_AI,
das Problem liegt darin dass derjenige die nicht überschreibbare Methode Foo in seiner Klasse benutzen möchte, dadurch die Basemethode mit new "versteckt", dann aber wieder die Foo der Mutterklasse aufruft. D.h. diese Methode ist sinnlos. M.e. hat dies nichts mit dem von dir genannten Gesetzt zu tun. Denn das Beispiel in deinem Link beschreibt ein komplett anderes Szenario. Dieses hier hat mehr mit nicht verstandener Vererbung zu tun.
Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp
private Nachricht | Beiträge des Benutzers
Jack_AI
myCSharp.de - Member



Dabei seit:
Beiträge: 198
Herkunft: Erlangen

beantworten | zitieren | melden

Hallo xxMUROxx, danke für die Erklärung. Jetzt kann ich die Problematik nachvollziehen. Mein Problem mit dem Beispiel war, dass ich das Schlüsselwort "new" überlesen/ignoriert habe (war auch schon spät). Jetzt strahlt der Horror in einem ganz anderen Licht. Jack
private Nachricht | Beiträge des Benutzers
DaemNice
myCSharp.de - Member



Dabei seit:
Beiträge: 67
Herkunft: Oberösterreich

beantworten | zitieren | melden

Hab auch wiedermal was tolles beim durchforsten von Code in der Firma gefunden:

public new void Hide()
{
     base.Hide();
}
private Nachricht | Beiträge des Benutzers
tkrasinger
myCSharp.de - Member



Dabei seit:
Beiträge: 582
Herkunft: Enzesfeld (Niederösterreich)

beantworten | zitieren | melden

private bool IsMASelectionAllowed()
{
    bool isallowed = false;

    if (IsFunktion((int)MitarbeiterFunktionArt.hauptberuflicheSachwalterIn)
    || IsFunktion((int)MitarbeiterFunktionArt.ClearingSachwalterIn)
    || IsFunktion((int)MitarbeiterFunktionArt.ehrenamtlicheSachwalterIn))
    {
        isallowed = true;
    }
    else
    {
        isallowed = false;
    }

    return isallowed;
}

ganz toll auch die Funktion dafür, Implementierung und Namensgebung ...

private bool IsFunktion(int funktion)
{
    if ((int)CurrentKidsLogin.Current.CurrentFunktion == funktion)
    {
        return true;
    }
    else
    {
        return false;
    }
}

Moderationshinweis von winSharp93 (06.05.2011 - 16:53:51):

Zwei aufeinanderfolgende Beiträge zu einem zusammengefügt

private Nachricht | Beiträge des Benutzers
Kamikaze
myCSharp.de - Member



Dabei seit:
Beiträge: 111

beantworten | zitieren | melden

So, von mir auch mal ein schönes Beispiel aus einem Projekt an der Uni.
Musste echt erst überlegen was das da macht und danach bin ich aus dem lachen nicht mehr raus gekommen.


private void addTowerLevels()
{
	for (int i = 1; i < 5; i++)
	{
		switch (i)
		{
			case 1:
				towerLvlTextures[i] = contentManager.Load<Texture2D>("Gui/towerlvl/1");
				break;
			case 2:
				towerLvlTextures[i] = contentManager.Load<Texture2D>("Gui/towerlvl/2");
				break;
			case 3:
				towerLvlTextures[i] = contentManager.Load<Texture2D>("Gui/towerlvl/3");
				break;
			case 4:
				towerLvlTextures[i] = contentManager.Load<Texture2D>("Gui/towerlvl/4");
				break;
		}
	}
}

Gruß,
Kami
private Nachricht | Beiträge des Benutzers
LucaWelker
myCSharp.de - Member



Dabei seit:
Beiträge: 7

beantworten | zitieren | melden

Soeben in einer Abfrage gefunden, is zwar kein Horror aber trotzdem wollte ich es hier posten:

SELECT * FROM from WHERE true = false AND false = true
Wusste garnicht dass dies so funktioniert.lg.
lg.

LucaWelker
private Nachricht | Beiträge des Benutzers
Uwe81
myCSharp.de - Member



Dabei seit:
Beiträge: 285
Herkunft: Ludwigshafen

Wenn es schon Reflection gibt, muss man sie auch nutzen...

beantworten | zitieren | melden

Ein Kollege hat mich neulich gebeten, ihm bei einem Code zu helfen, den er von einem ausgeschiedenen Mitarbeiter übernommen hat.

Verteilt über eine etwas längliche Klasse mit wenigen hundert Zeilen (Zur anonymisierung des Projekts Namen etwas geändert, waren vorher aber auch nicht sprechender...):


public class SolverService
{
    private static readonly Random random = new Random(DateTime.Now.Millisecond);        
    delegate Item ApplyDelegate(List<Item> candidates);
    private const string ChoiceRandomName = "Random";
    private const string ChoiceFrequencyName = "Frequency";
    Dictionary<string, ApplyDelegate> choicesDelegates;
    
    public SolverService()
    {
        choicesDelegates = new Dictionary<string, NextCandidate>();
        MethodInfo mi = typeof(SolverService).GetMethod("ChoiceRandom", BindingFlags.NonPublic | BindingFlags.Static);
        ApplyDelegate applyDelegate = (ApplyDelegate)Delegate.CreateDelegate(typeof(ApplyDelegate), mi);
        choicesDelegates.Add(ChoiceRandomName, applyDelegate);

        mi = typeof(SolverService).GetMethod("ChoiceFrequency", BindingFlags.NonPublic | BindingFlags.Static);
        applyDelegate = (ApplyDelegate)Delegate.CreateDelegate(typeof(ApplyDelegate), mi);
        choicesDelegates.Add(ChoiceFrequencyName, applyDelegate);
    }

    public Item Perform(List<Item> candidates)
    {
        int next = random.Next(0, choicesDelegates.Count);
        string currentChoice = (next == 0) ? ChoiceRandomName : ChoiceFrequencyName;
        return choicesDelegates[currentChoice].Invoke(candidates);
    }

    private static Item ChoiceRandom(List<Item> candidates) { /*....*/ }
    private static Item ChoiceFrequency(List<Item> candidates) { /*....*/ }
}


Wir haben den Teil dann reduziert bekommen zu


public class SolverService {
    private static readonly Random random = new Random();

    public Item Perform(List<Item> candidates) {
        if (random.NextDouble() < 0.5) {
            return ChoiceRandom(candidates);
        } else {
            return ChoiceFrequency(candidates);
        }
    }

    private static Item ChoiceRandom(List<Item> candidates) { /*....*/ }
    private static Item ChoiceFrequency(List<Item> candidates) { /*....*/ }
}

Davon, dass nun eine IList im öffentlichen Interface schöner wäre, will ich garnicht erst anfangen...
private Nachricht | Beiträge des Benutzers
Shion
myCSharp.de - Member

Avatar #avatar-3231.jpg


Dabei seit:
Beiträge: 24
Herkunft: Schweiz

beantworten | zitieren | melden

Sowas gibt's ja öfters, wie mir scheint.
Jedoch war ich trotzdem fast am verzweifeln als ich vorhin folgendes gefunden habe:

        private bool IsNull(int? i)
        {
            return i == null ? true : false;
        }

        private bool IsNull(decimal? d)
        {
            return d == null ? true : false;
        }

@Zu den Hinweisen unten:

Genau, ich würde das mit HasValue oder direkt mit == null verwenden. Auch wenn der Aufruf mit int machbar wäre, bringt dies ja nichts. int kann im Gegensatz zu int? sowieso nicht null sein. ;)
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Shion am .
Signature not available at the moment.
private Nachricht | Beiträge des Benutzers
tkrasinger
myCSharp.de - Member



Dabei seit:
Beiträge: 582
Herkunft: Enzesfeld (Niederösterreich)

beantworten | zitieren | melden

@Shion, wobei der Horror nur die Verwendung des ?: Operators im return ist, die Funktionen selbst sind in meinen Augen durchaus legitim, weil eine IsNull(int? value) Methode nämlich von "int" und "int?" aufrufbar ist, daher könnte man die IsNull() Funktion in dieser Hinsicht universell verwenden.
Brauchbar ist das z.B. wenn man irgendwo per Reflection Daten holt ...
Der Teil Bedingung ? true : false ist trotzdem Käse ... ;-)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von tkrasinger am .

Moderationshinweis von winSharp93 (30.05.2011 - 17:31:33):

Ansonsten existiert ja noch HasValue oder man schreibt gleich i == null statt IsNull(i).
Aber bitte keine zu ausführliche Diskussion über die CodingStyle Horrors hier in dem Thread!

private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #nZo9Gyth4VPDSxGqM4sT.jpg


Dabei seit:
Beiträge: 3756
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

Ist zwar VB, aber ich hoffe ihr versteht das geniale Prinzip dennoch :
Dim Anzahl As Integer
 
Private Sub Command1_Click()
    Anzahl = 0;
    For i = 1 To objMapi.GetDefaultFolder(olFolderInbox).UnReadItemCount
        Anzahl = Anzahl + 1
    Next
    MsgBox Anzahl & " ungelesene Nachricht(en) !", vbInformation, "Outlook" & _
      "Postfach"

;-)

Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
private Nachricht | Beiträge des Benutzers
mep
myCSharp.de - Member



Dabei seit:
Beiträge: 30

beantworten | zitieren | melden

if (true || connection_id == null)
O_o
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7547
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,


Thread t = new Thread(monitor);
t.Start();
t.Join();
Quelle: hier im Forum gesehen ;-)


mfG Gü

PS: Erklärung und Abhilfe findet sich in [FAQ] Warum blockiert mein GUI?.
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
Blue_Dragon
myCSharp.de - Member



Dabei seit:
Beiträge: 199
Herkunft: Österreich

beantworten | zitieren | melden

Gerade eben über dieses geniale Stück Code gestolpert:

            QObject finanzierung = context.QKernelClient.GetObject(context.QPointer);
            if (finanzierung != null)
            {
            }

            Refresh(context);
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 7547
Herkunft: Waidring

beantworten | zitieren | melden

Hallo,

hab gerade eine (SL-) Anwendung betrachtet die fremdvergeben wurde. Ich finds lustig und irgendwie genugtuend denn diejenigen die das gemacht haben waren vor dem Auftrag so gescheit - im Sinne von: wir wissen alles und können alles und das was wir nicht wissen schlagen wir kurz bei Wikipedia nach und dann wissen wir das auch (v.a. als es um sehr fachspezifisches ging) - dass es für mich schon kaum auszuhalten war. Warum die den Auftrag trotzdem bekommen haben? Nicht alle Entscheidungen treffe ich...tw. leider....

Die ganze Eingabe-Validierung findet mit Methoden in den "ViewModel"-Klassen statt, die nach der Art


public bool IsValidDoubleInput(RadComboBox cb)
{
	if (cb.SelectedValue == null)
	{
		try
		{
			if (cb.Text == null)
			{
				throw new Exception();
			}
			cb.Text = cb.Text.Replace(",", m_cDecimalSeperator);
			cb.Text = cb.Text.Replace(".", m_cDecimalSeperator);
			Convert.ToDouble(cb.Text);
			cb.BorderBrush = this.ValidBrush;
			return true;
		}
		catch (Exception)
		{
			cb.BorderBrush = this.InValidBrush;
			return false;
		}
	}
	cb.BorderBrush = this.ValidBrush;
	return true;
}
aufgebaut sind. Falls irgendwo eine Validierung fehlschlägt wird zusätzlich zum roten Rahmen (die BorderBrush im Code) um das Control an immer gleicher Stelle nur "Fehlerhafte Eingabe" angezeigt. Sehr hilfreich...
Von Validierungen bezüglich nicht zulässigen negativen Werten ganz zu schweigen und auch dass null-Eingabe als valide betrachtet wird...

Hinzu kommt sonst auch noch Geldverschwendung denn die zusätzliche Funktionalität von den Telerik-Radcontrols wird gar nicht genutzt...

Womöglich muss ich einen Wiki-Artikel über double.TryParse und deren Überladungen schreiben


mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
ProgrammierTroll
myCSharp.de - Member

Avatar #avatar-3285.jpg


Dabei seit:
Beiträge: 117

beantworten | zitieren | melden

Ist es denn "ok" oder guter Stil ein Steuerelement als Parameter an eine Methode zu übergeben?
q.e.d.

Moderationshinweis von herbivore (15.07.2011 - 09:17:34):

Bitte keine fachlichen Fragen in diesem Thread. Deshalb nur kurz: Ja, das kann ok sein, aber nur, wenn die Methode zu einer GUI-Klasse gehört. An eine Methode im Business-Layer sollte man auf keinen Fall ein Control übergeben. Der BL soll das GUI überhaupt nicht kennen.

private Nachricht | Beiträge des Benutzers