Laden...

Funktionalitäten schon zur Entwurfszeit

Erstellt von Bettvorleger vor 17 Jahren Letzter Beitrag vor 17 Jahren 3.416 Views
Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren
Funktionalitäten schon zur Entwurfszeit

Guten Tag,

ich frage mich schon einige Zeit, wie man es schafft einige Programmfunktionalitäten bereits zur entwurfszeit benutzten zu können.
Beispielsweise beim TabControl ist es möglich zur Entwurfszeit auf ein Tab zu klicken, um dessen Inhalt bearbeiten zu können. Wie geht das?

Vielen Dank!

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Bettvorleger,

die Entwurfszeit ist ja nichts anderes als die Laufzeit der IDE (z.B. des Designers). Das Control wird also einfach erzeugt. Die (kleinen) Unterschiede im Verhalten der Komponeten werden durch Component.DesignMode gesteuert.

herbivore

Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Vielen Dank für den Hinweis. Leider weis ich nicht wie man damit arbeitet. Ich habe nur gesehen, dass diese Eigenschaft ReadOnly ist.
Wie kann man damit arbeiten, wie funktioniert das? Kennt sich jemand damit aus oder kennt jemand entsprechende Seiten, wo das Arbeiten damit behandelt wird?

Vielen Dank!

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Bettvorleger,

==> Forumssuche

herbivore

T
512 Beiträge seit 2006
vor 17 Jahren

Das ist eben nur ein Wert der dir anzeigt, ob du gerade in DesignTime bist.

Z.B. wenn man ein Component schreibt, dass sich mit einem anderen PC verbinden soll. Es wär ja irgendwie blöd, wenn man die ganze Zeit während man mit dem Designer arbeitet ständig Fehler kriegt, dass die Verbindung nicht aufgebaut werden konnte.
Also steckt man den ganzen Aufbau kram hinter ein if( !DesignTime ) und es wird eben nicht zur Entwurfszeit ausgeführt.

e.f.q.

Aus Falschem folgt Beliebiges

Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Ich denke, dann wird mir das nicht viel helfen... Oder kann mein Problem damit gelöst werden? Wie gesagt, ich möchte, dass ein Control auch schon im Design-Modus benutzbar ist... Kann ich beim erstellen eines Controls steuern, ob dieses im Design-Modus schon funktionieren? Wenn ja, wie?

Die Suche in diesem Forum hat leider keine erfolgversprechenden Ergebnisse geliefert...

Vielen Dank!

1.985 Beiträge seit 2004
vor 17 Jahren

Hallo Bettvorleger,

kannst Du vielleicht das "schon zur Desingzeit funktionieren" und "mein Control" etwas genauer beschreiben? Was genau für ein Control ist das und was genau soll funktionieren?

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

5.941 Beiträge seit 2005
vor 17 Jahren

Das würde mich so nebenbei auch interssieren.

@herbivore
Was für Stichworte benutzt du für die Suche, ich werde, es tut mir leid, nicht fündig...

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Peter Bucher,

z.B. DesignMode

herbivore

Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Also ich glaube die Forumsuche wird hier etwas überschätzt! (Oder ich bin einfach zu blöd)

Alle Ergebnisse behandeln mindestens im weitesten Sinne die Problematik bestimmte Codesegmente nicht auszuführen, wenn sich das Control im DesignMode befinden. Ich möchte aber genau das gegenteil. Ich möchte, dass ein Control zur Entwurfszeit schon funktioniert.

Als Beispiel ist das TabControl geradezu prädestiniert. Wie schafft man es, bereits zur Entwurfszeit auf die Tabs zu klicken, sodass dies auch zur Entwurfszeit ein Ereignis (z.B. die Anzeige eines anderen Panels, wie beim TabControl) auslöst?

Vielen Dank!

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo Bettvorleger,

Also ich glaube die Forumsuche wird hier etwas überschätzt!

das denke ich nicht. Erklärung: Dass du im konkreten Fall nicht fündig wurdest, liegt daran, dass deine Frage missverständlich formuliert ist und ich dachte, dass du etwas anderes wissen willst. Weitere Informationen zu der Frage, so wie ich sie verstanden habe, hätte es über die Suchfunktion gegeben.

Deine Frage wurde eingeleitet mit einer Aussage:

Beispielsweise beim TabControl ist es möglich zur Entwurfszeit auf ein Tab zu klicken, um dessen Inhalt bearbeiten zu können.

Ich habe es so verstanden, dass sich die Standard-Controls immer so verhalten, wie du willst.

Wie geht das?

habe ich dann entsprechend als "Warum geht das?" aufgefassst.

Deine eigentliche Frage kann ich nicht beantworten. Ich vermute aber, dass die Abfragen über den DesignMode in den Standard-Controls so versteut über deren Implementierung sind und noch dazu im zugrundeliegenden Win32-Code enthalten sind, dass man schon ziemlich viel ändern müsste, um die Standard-Controls zu einem "normalen" Verhalten im DesignMode zu bringen. Wenn man ein Control von Grund auf selbst schreibt, könnte man das natürlich hinbekommen.

herbivore

Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Schade, das tut mir leid. Ich werde mich bemühen zukünftig mehr Mühe bei meinen Formulierungen walten zu lassen.

Vielleicht hat trotzdem jemand eine Idee, wie man in solch einem Falle vorgehen muss oder schoneinmal etwas darüber gelesen oder gehört?

Vielen Dank!

369 Beiträge seit 2006
vor 17 Jahren

Ein normales verhalten macht auch i.d.R. wenig Sinn, da zur Entwurfzeit völlig andere Erwartungen herrschen. Bestes Beispiel hierfür ist eine Form, bei der du die Größenänderung deaktiviert hast. Dennoch willst du zur Entwurfszeit die Größe durch Anpacken der Ränder verändern können. Auch AutoScaling ist während der Anzeige in der IDE aus entsprechenden Gründen deaktiviert.

Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

...in der Regel nicht. Bei einem TabControl hingegen macht es recht viel Sinn.

369 Beiträge seit 2006
vor 17 Jahren

Beim TabControl funktioniert es doch auch!? Auch eigene CustomControls werden bereits zur Entwurfszeit gerendert...

Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Es geht darum, dass man bereits zur Entwurfszeit auf ein Tab klicken kann und damit ein Event auslöst.

F
28 Beiträge seit 2006
vor 17 Jahren

Das geht schon.
Erstelle deine Form und hinterlege die Events an deinen Tabs.
Achte dabei drauf, dass du vor deinen Aktionen in den Ereignissen immer
abprüfst, ob du im designmode bist (if(DesignMode){...}) sonst gehen die Ereignisse auch zur Laufzeit los.
Erstelle nun eine neue Form die von deiner ersten form erbt.
Das TabControl liefert jetzt die Ereignisse zur Entwurfszeit.

Die Eulen sind nicht was sie scheinen!

Bettvorleger Themenstarter:in
12 Beiträge seit 2006
vor 17 Jahren

Vielen Dank für die Antwort. Leider funktioniert das bei mir irgendwie nicht. Magst du mir ein Code-Beispiel geben?

Vielen Dank!

4.506 Beiträge seit 2004
vor 17 Jahren

HAllo zusammen,

ist es denn soo schwer?

Es gibt 3 Zustände:

Design-Zeit, Laufzeit und Beides.

Jeweils die Codeausführung lassen sich dadurch regeln, dass man eine einzelne if-else Abfrage benutzt:



if (DesignMode)
{
    // hier wird Code nur ausgeführt, wenn er im Designer sich befindet
}
else
{
    // hier wird Code nur zur Laufzeit, und nicht im Designer ausgeführt
}

// hier wird Code sowohl zur Designzeit, als auch zur Laufzeit ausgeführt.


Einzig allein was man wissen muss, ist die Tatsache, dass der Standardconstructor vom Designer benötigt und aufgerufen wird.

Das Tab-Control würde sich also so verhalten (Pseudo-Code):



OnTabPage-Clicked(object sender, EventArgs e)
{
   // Code wird sowohl zur Laufzeit, als auch im Designer ausgeführt
   ChangeTabAndShowItsControls();
}

// ...

OnItemDropped(object sender, EventArgs e)
{
   // wird nur im Designer ausgeführt:
   if (DesignMode)
   {
       AddDroppedItemToControlList();
       InvalidateTabControl(); // erzwinge eine Neuzeichnung (inkl. neuem Control)
   }
}

// ...

// Mir fällt grad kein Beispiel ein, das nur zur Laufzeit, aber nicht im DesignMode ausgeführt wird...

Ich hoffe jetzt sind alle Klarheiten beseitigt?

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”