Laden...

Forenbeiträge von DarKlajid Ingesamt 386 Beiträge

01.08.2007 - 12:17 Uhr

Hi.

Irgendwie gehen mir die Suchworte langsam aus. Was ich machen moechte ist folgendes:

Ein DataGrid (Ich arbeite in diesem Projekt gezwungenermassen noch mit 1.1) soll eine Liste von (von mir erstellten) Objekten darstellen. Die einfachste Variante die ich bisher gefunden hab sieht so aus:


public class FilterCollection : CollectionBase {
...
}

public class FilterItem {
// Hier mein eigener Kram, z.B.
public string Foo { get { return "Bar"; } }
public string Bla { get { return "Fasel"; } }
}

und irgendwo halt erstelle ich eine solche Collection, befuelle sie mit Items, haenge sie an ein DataGrid und die Properties werden automagisch angezeigt.

Nun moechte ich genau dieses Defaultverhalten aendern: Ich wuerde gerne:

  • Spalten verstecken/in der Reihenfolge aendern
  • Titel/Header Texte anders nennen als die Properties

Zunaechst sahen DataGridTableStyle und DataGridTextBoxColumn ganz passabel aus, aber offensichtlich kann ich in diesem Szenario nicht mit MappingName arbeiten.
Eine DataGridTextBoxColumn mit .MappingName "Foo" bezieht sich leider nicht auf die Property Foo. Irgendwelche Tricks wie ich das doch noch hinbekomm?
Die Daten kommen aus keiner Datenbank, es gibt keine irgendwie relevante Datenquelle bisher, d.h. ADO.Net kann mir nicht helfen.

Danke im voraus,
Ben

24.07.2007 - 13:44 Uhr

In pcre Notation:

s/ {2,}/ /g

oder

s/ +/ /g

Sollte es tun..

Edit: Ups, falsch gelesen. Danke, herbivore

18.07.2007 - 19:41 Uhr

Du hast dich verlesen. Was nicht geht (nach wie vor nicht, deine Antwort hat nichts damit zu tun) ist die Nutzung von C++ Klassen und deren Methoden von C# aus. Das hat nichts mit Inverse P/I zu tun..

18.07.2007 - 19:29 Uhr

Ich kann mich nicht beklagen und verstehe bisher auch nur einen Punkt:
Die Fehlermeldungen die man anscheinend in der Team Editon zu sehen bekommt.

Das bei einem Konflikt die Daten in der entsprechenden Datei landen ist normales Subversion Verhalten und wuerde mich eher stoeren, wenn es nicht passieren und damit meinen Erfahrungen widersprechen wuerde.

Die "Moeglicherweise werden nicht alle Dateien aktualisiert" Beschreibung kann ich bisher nicht bestaetigen und die klingt hier auch bei jedem vage, vorsichtig und ungeprueft.

Mein Fazit: Nicht besonders schoen, aber funktioniert. Andererseits bin ich von meinen Tools auch sonst eher verwoehnt (IntelliJ, Eclipse) und sehe hier generell noch einen grossen Nachholbedarf.

18.07.2007 - 13:07 Uhr

Kommando zurueck, ich konnte nicht lesen. SetMaxThreads() gibt es ja erst ab 2.0

18.07.2007 - 01:19 Uhr

Hmm.. Kuka sagt auf der Homepage, dass sie VxWorks oder Windows CE parallel zu Windows XP auf einem einzigen Prozessor hart echtzeitfaehig kriegen..
Hmm - das sieht zwar serioes aus, widerspricht aber all meinen Kenntnissen ueber Windows (und u.a. auch PC Hardware, eine Architektur die dafuer mal bescheiden geeignet ist). Interessant jedenfalls.

18.07.2007 - 01:14 Uhr

Es gibt immer noch Unterscheidungen bei dem Wort "Echtzeit". Dass ein normales Windows-OS zu harter Echtzeit faehig ist, glaube ich nichtmal im Ansatz. Dass PC Hardware aus dem Regal dazu faehig ist ebensowenig. Fuer "weiche" Echtzeit mag es Workarounds/Tools etc. geben, aber deswegen wuerde ich trotzdem keine Raketen mit Windows und nem Standard-PC als Navigationssystem ausruesten..

17.07.2007 - 16:37 Uhr

So, Problem geloest, dank Svenson.

Loesung:


[StructLayout(LayoutKind.Sequential,Pack=0,CharSet=CharSet.Ansi)]
public sealed class Region {    
  public string Result { get { return Marshal.PtrToStringUni(this.resultPtr); } }

  [MarshalAs(UnmanagedType.ByValArray,SizeConst=8)]
  public char[] Version;
  public Int32 Size;
  public Int32 Type;                
  public Int32 Left;
  public Int32 Top;
  public Int32 Width;
  public Int32 Height;
  public Int32 SomeInt;
  public Int32 AnotherInt;
  public Int32 AThirdInt;
  private IntPtr resultPtr;
  public Double Value;
  public Int32 ALastInt;    
}

Damit bleibt der String auch nach mehreren Aufrufen erhalten. Warum es jedoch vorher gescheitert ist bleibt ein Raetsel fuer mich. Nach wie vor kann ich mir nur vorstellen, dass da ein uebereifriges Framework meinte, der String gehoere ihm? Wie auch immer: Scheint zu klappen.

wakestar:
Keine Ahnung. Es ist eine normale Win32/Native DLL, Schnittstellen sind definiert fuer Delphi und C. Ich vermute es steckt auch C dahinter, weiss es aber nicht.

Edit: Typo raus.

17.07.2007 - 15:24 Uhr

Original von Cookiie
Im Quellcode müßte ja enthalten sein wie die Struktur der itemcache.wdb ist.

Aehm.. Und was ist mit dem Link auf die detaillierte Beschreibung des Formats, der zweimal oder mehr hier im Thread gepostet wurde? Da steht eigentlich alles nuetzliche drin..

17.07.2007 - 15:02 Uhr

Nur als Verstaendnisfrage:
Du meinst aber schon nur den bisherigen String als IntPtr zu behandeln, oder? Nicht die gesamte Klasse Region?
Werd mich gleich mal damit auseinander setzen. Danke nochmal.

17.07.2007 - 14:07 Uhr

StringBuilder habe ich versucht, da bekomme ich dann allerdings erst gar kein Resultat mehr zurueck. Und modifizierbar muss der String eig. auch nicht sein.. =/
Mal sehen, vielleicht muss ich damit mehr herumexperimentieren.

Speicherfreigabe ist kein Problem, weil die DLL zwingend spaeter noch mit diesen Daten weiterarbeiten muss. Es geht hier also an dieser Stelle nur um das abgreifen von Informationen.

Bloed gesagt:

  1. DLLInit()
  2. HierHoleIchdieRegion()
  3. DLLFinalize()

Der Speicher wird schon spaeter freigegeben, nur habe ich aktuell eher das Gefuel dass ICH halt beim Marshalling (und wie gesagt, da bin ich recht unbeschlagen, thematisch) irgendwie dafuer sorge, dass der Speicher von mir/.Net gefressen wird. Was falsch waere..

Danke fuer die Hilfe soweit.

17.07.2007 - 14:04 Uhr

Meine (absolut laienhafte) Vermutung ist halt, dass folgendes passiert (zumindest wuerde das das beobachtete Verhalten erklaeren):


// Hier kriege ich eine brauchbare (lies: Gefuelltes Result) Region
Region region1 = GetTestRegion();
System.Windows.Forms.MessageBox.Show("Result first time: "+region1.Result);
/* Ab hier weiss der Compiler, dass region1 unnuetz ist und collected sie vielleicht direkt?
   Was passiert dabei mit dem String? Referenziert der hier wirklich den unmanaged
   Kram, d.h. kann ich mir hier an dieser Stelle durch einen collect den Speicher den die
   DLL fuer den String reserviert hat zersemmeln?
\*/
Region region2 = GetTestRegion();
System.Windows.Forms.MessageBox.Show("Result second time: "+region2.Result);

17.07.2007 - 11:41 Uhr

Hmm.. Da hab ich mich wohl nicht klar ausgedrueckt. Die Parameter in TestRule kommen an. Ich hab das Inverse P/I nur erwaehnt, falls es irgendwie Seiteneffekte haben sollte. Ab dort (TestRule) ist es "normales" P/I.

Das genau geht anscheinend schief: Ich bekomme meine Instanz von Region, kann dort auf den String zugreifen. Ich hole die gleiche Region erneut (normalerweise nicht direkt danach, aber dieser Testcase zeigt das Problem) und nun ist der String futsch.

Bin ich schuld? Hast du ne Idee?

17.07.2007 - 10:31 Uhr

Schoen das es geht.
Das ist nur kein Leerzeichen (das waere eine 32dec/20hex als Wert) sondern ein NUL.
Das steht uebrigens auch genau so in der Dokumentation zu der Datei:

The strings are null-byte terminated.

16.07.2007 - 18:06 Uhr

Ich rate eher zum C# Grundlagenbuch.
Das Format ist ja unter dem o.a. Link exakt definiert. Wenn man es dann nicht auslesen kann wuerde ich eben erst zu einem generellen Tutorial raten.
Nichts fuer ungut.

16.07.2007 - 16:40 Uhr

Mahlzeit.

In einem Projekt hier setze ich inverse P/I ein, um aus einer Legacy Schnittstelle trotzdem C# nutzen zu koennen. Das Problem aktuell dabei ist folgendes:

Ich werde per Inverse P/I aufgerufen, lande in Funktion X, rufe von dort teilweise wieder per normalem P/I andere alte Komponenten auf. Dieses Design laesst sich nicht aendern, also helfen keine Kommentare zur Haesslichkeit.. =)

Meine Einsprungsfunktion ist TestRule und der Code sieht grob so aus:


// Externe Funktion und benutzter Datentyp
[DllImport("Some.dll", EntryPoint="EchterName")]
public static extern Int32 GetWorkingField(ref Region region);

[StructLayout(LayoutKind.Sequential,Pack=0,CharSet=CharSet.Ansi)]
public sealed class Region {    
  [MarshalAs(UnmanagedType.ByValArray,SizeConst=8)]
  public char[] Version;
  public Int32 Size;
  public Int32 Type;                
  public Int32 Left;
  public Int32 Top;
  public Int32 Width;
  public Int32 Height;
  public Int32 SomeInt;
  public Int32 AnotherInt;
  public Int32 AThirdInt;
  [MarshalAs(UnmanagedType.LPWStr)]
  public string Result;
  public Double Value;
  public Int32 ALastInt;    
}

public static int TestRule([MarshalAs(UnmanagedType.LPWStr)]string stringParam, int intParam) {
  Region region1 = GetTestRegion();
  System.Windows.Forms.MessageBox.Show("Result first time: "+region1.Result);
  Region region2 = GetTestRegion();
  System.Windows.Forms.MessageBox.Show("Result second time: "+region2.Result);
  return 1;
}

public static Region GetTestRegion() {
  Region region = new Region();
  GetWorkingField(ref region);
  return region;
}

Resultat: Die Methode TestRule wird aufgerufen (per Inverse P/I, falls das wichtig ist), holt sich ueber GetTestRegion() (Hier habe ich natuerlich vereinfacht, aber genau so laeuft es ab) eine Datenstruktur ueber einen P/I call und nutzt den. In diesem Fall hole ich mir also zweimal die gleiche Datenstruktur und gebe den enthaltenen String aus.
Das funktioniert nur einmal, leider, d.h. in TestRule (und auch danach, was fuer die Applikation eine mittlere Katastrophe ist) ist beim ersten Popup noch ein String Wert vorhanden, beim zweiten und allen folgenden Zugriffen nicht mehr. Es scheint als wenn ich irgendwie durch den blossen Zugriff/das Marshalling mir hier diesen Wert versaue/loesche. Bei den Int-Werten in der Struktur tritt das nicht auf.
Dieses Verhalten tritt auch nicht auf, wenn ich die Funktionalitaet (GetWorkingField() und dann Zugriff auf das Result) direkt aus einer unmanaged dll nutze (aber das ist wie gesagt nicht gewollt/machbar).

Hat jemand eine Idee was ich falsch mache?

Als Referenz hier nochmal die Definition der Region auf unmanaged Seite, falls es daran liegen sollte:


typedef struct {
   char        szVersion[8];
   long        lSize;
   long        iType;
   long        left, top, width, height;
   long        someInt, AnotherInt, AThirdInt;
   wchar_t    *szResult;
   double      dValue;
   long        ALastInt;
} TREGION;
25.05.2007 - 18:24 Uhr

Ich wuerde bei Windows.Forms bleiben. Die Wahrscheinlichkeit, dass das was du brauchst bei mono nicht vorhanden oder fehlerbehaftet ist halte ich fuer sehr gering und fuer vernachlaessigbar.

Mono braucht man im Gegensatz zum .Net Framework nicht "installieren", nur mit ausliefern. Das macht fuer dein Problem mit der Groesse keinen Unterschied ist aber interessant beim Deployment ggf..

Datenbanken: Was haelst du von SQLite? Duerfte klein sein, gibt es fuer Windows und Linux (bei Mac wuerd ich es fast unterschreiben, hab es aber nicht nachgeschaut) und ist fuer kleinere Projekte wie dieses einfach zu nutzen.

GTK vs. QT koennte zwar zu einem netten Flame fuehren, grundsaetzlich sind aber beides "nur" andere Window Toolkits. Wenn du GTK# nicht nutzen willst weil es extra mitgeliefert werden muss, dann musst du auch auf QT verzichten.
Der Rest ist dann wohl reine Geschmackssache.

24.05.2007 - 12:22 Uhr

Die Process Klasse kann die Standardausgabe umlenken, d.h. du kannst die Standardausgabe eines Prozesses lesen. Dort, in den StartInfo Einstellungen des Prozesses, kannst du auch dafuer sorgen dass keine Konsole aufgeht.

Auch wenn das immer wieder auftaucht: Das ist keine DOS Box.. Ausser du benutzt Windows 1.x, 3.x, 95, 98 oder ME.

22.05.2007 - 16:09 Uhr

Disclaimer: Ungetestet, einfach nur hier im Editor geaendert.
Warum nicht so? Geaendert hab ich hier nur, dass using() {} verwendet wird. Und mich wuerde interessieren ob das Peek von dir besser oder schlechter ist als diese Version.


public htmlind(string lsUrl) {
  WebRequest WebReq = WebRequest.Create(lsUrl);
  using (WebResponse WebResp = WebReq.GetResponse()) {
    StringBuilder myBuildContent = new StringBuilder();
    ldScrapTime = DateTime.Now;
    lsErrorCode ="";
    try {
      using (StreamReader myStreamR = new StreamReader(WebResp.GetResponseStream(),
                    System.Text.Encoding.UTF7)) {

        string line;
        while ((line = myStreamR.ReadLine()) != null)
        {
          myBuildContent.Append(line);
        }
      }
    } catch (Exception e) {
      lsErrorCode = e.ToString();
    }
    lsHtmlContent = myBuildContent.ToString();
  }
}

  // Kram hier
}

22.05.2007 - 15:48 Uhr

Komplett OT:

Original von BerndFfm
...sondern den Client von ihrem Standard-Email-Programm, z.B. Groupwise, David, Outlook oder wie es heissen mag.

Nicht hauen (es ist ja auch albern): Ich hab mal bei Tobit gearbeitet.. Immerhin unterscheidest du schon zwischen Firma und Produkt (die meisten behaupten sie haetten "Tobit" gekauft oder als Mailloesung im Haus), aber David ist ein Serverprodukt, Outlook ein Client. David und Exchange oder (zumindest als ich da mal aktuell war) Tobit Infocenter und Outlook ware hier geschickter.

Sorry, ich konnte wirklich nicht widerstehen.

Aus purer Neugier: Nutzt du das System irgendwo? Bin seit Jahren bei denen weg, ueberlege aber mir das Zeug privat nochmal anzuschauen. Aber ich bin da seit David 6 raus..

22.05.2007 - 15:36 Uhr

Was genau hast du denn vor, um mal von einer anderen Seite an das Problem heran zu gehen..
Du willst aber nicht gerade sowas wie:
"Gib mir alle Dateien der Endung XXX" mit einer solchen Schleife bauen, oder?

21.05.2007 - 16:06 Uhr

Ich denke auch das Format muss besser definiert werden.
Bisher wuerde ich folgendes sehen/vermuten (und liege wahrscheinlich falsch):

Filename und bool sind immer auf einer Zeile, das Statement kommt erst danach.

Wenn das nicht gegeben ist:
Filename und bool werden in dem Ausdruch doch schon gut gematcht. Den Exportausdruck wuerde ich dann am Select oder eben an (select|update|...) verankern.

Im Endeffekt haben wir aber zuwenig Informationen.

Edit: Du kannst natuerlich das (greedy) .+ zu einem .+? zuegeln, um Herbivores Bemerkung zu kommentieren. Aber dein Format ist nach wie vor unvollstaendig erklaert.

21.05.2007 - 15:56 Uhr

Dumm gefragt: In er letzten Gruppe willst du alles ab/inklusive dem Select..?
Wenn ja, dann sieh den Satz als Zaunpfahl.

21.05.2007 - 15:29 Uhr
ReadToEnd()

vs


string line;
while ((line = sr.ReadLine()) != null) {
  // Use line here
}

21.05.2007 - 12:08 Uhr

"Boeser Hack"? Noe, vom Framework supported und nuetzlich aus meiner Sicht. Gut, es braucht einen Roundtrip mit Assembly -> IL -> Assembly, aber das ist eher eine Dummheit/ein Problem des C# Compilers..

Ich denke aber, dass der Threadstarter Zugriff auf Objekte haben will (daher Reflection als Keyword). Dafuer sehe ich keine einfache (und vor allem performante) Moeglichkeit.

21.05.2007 - 12:02 Uhr

Nitpicking/konstruktive Kritik meinerseits:

  • Ich wuerde Sprachen nicht mischen. Das meiste ist deutsch, warum gibt es dann "lenght" statt "Laenge"?

  • Tippfehler lassen zumindest mich stark stolpern beim lesen:

-- Length statt lenght
-- IsDigitOrDot statt IsDiditOrDot // Oder warum nicht auch deutsch?

  • IsDiditOrDot hat als Argument einen String, obwohl die Bezeichnung (chr) und die Verwendung (wenn es nicht genau ein Zeichen ist passiert nix sinnvolles) hier eher char als Typ nahe legen wuerden.

  • Obwohl ich gar kein hardcore Gegner von goto bin (es gibt Stellen, da ist es lesbar und macht Sinn): Uber das "zurueck:" label bei dir bin ich auch gestolpert.. Hier kann man sich streiten, aber ich wuerde wohl behaupten das macht hier keinen Sinn. Es scheint nur

e.Handled = false

zu ueberspringen und dafuer ist es nun wirklich nicht noetig und zu igitt.

21.05.2007 - 11:45 Uhr

Hi.

Control.Dock macht mich noch wahnsinnig. Nachdem auf meine letzte Frage hier schon jemand mit dem hilfreichen Hinweis auf die Z-Order kam, habe ich nun ein neues Problem:

2 Panel in einem Form nebeneinander, PanelA und PanelB.

PanelA hat den DockStyle.Fill
PanelB hat den DockStyle.Left (geht) oder .Right (geht nicht)

Besonderheit: Das PanelB zeigt DinA4 Daten an und passt bei einem SizeChanged seine eigene Breite auf das entsprechende Verhaeltnis (1 : 1.4241) an.
Ist es links von PanelA, dann funktioniert das hervorragend: PanelB frisst den restlichen Platz.
Ist es rechts von PanelA, dann funktioniert es nur, wenn ich die Fensterbreite veraendere (logisch: Die Hoehe des PanelB aendert sich nicht, das Verhaeltnis von Breite zu Hoehe stimmt und es wird nichts gemacht). Aendere ich aber die Hoehe (oder Hoehe und Breite), dann scheint das DockStyle.Fill nicht zu greifen bzw. zu spaet zu kommen. Meine Interpretation:

  1. User aendert Form.Size
  2. Form ermittelt Groessen anhand der DockStyles
  3. PanelB kriegt ein SizeChanged und aendert seine Breite

Resultat: Es sieht scheisse aus. Was kann ich machen?

Zur Verdeutlichung ein Bild des Problems, eingefaerbt um das Problem zu zeigen: (Siehe Anhang)

Hilfe?

Hmpf. Es scheint nun zu gehen, mittels


this.Parent.ResumeLayout(true);
this.Parent.Refresh();

Haesslich allerdings, irgendwie..

12.05.2007 - 21:07 Uhr

Was genau ist eine DosBox? Dos gibt es seit Windows NT nicht mehr wirklich.. Und das kam deutlich vor .Net/C# raus..

Ich nehme an du meinst auf der Standardausgabe wird etwas ausgegeben, richtig? Wenn du das Programm selber starten kannst/Einfluss auf das starten hast, dann kannst du die Standardausgabe in eine Datei umlenken.

DeinProgramm /debug > EineDatei

Danach koenntest du die Datei ueberwachen und auslesen.

Unter *nix gibt es fuer diesen Fall das nuetzliche Tool "tee", das seine Eingabe in eine Datei schreibt und wieder auf der Ausgabe ausgibt. Dort haette man dann an deiner Stelle

DeinProgramm /debug | tee EineDatei

benutzt. Vielleicht hilft dir diese Information um nach einer aehnlichen Loesung fuer Windows zu schauen?

10.05.2007 - 13:25 Uhr

Original von BerndFfm
Oder so :

  
string text = File.ReadAllText("Testdatei.txt");  
text = text.Replace("\r\nTest","\r\n|Test");  
string[] felder = text.Split('|');  
  

Als Trennzeichen (hier |) musst Du natürlich ein Zeichen wählen dass nicht im Text vorkommt.

Nur aus Neugier: Warum soll er hier erst aus einer Trennmarkierung eine andere machen?

06.05.2007 - 16:28 Uhr

Mahlzeit.

Ich find das Thema hochinteressant, hab aber mit beiden hier geposteten Beispielen noch ein Problem:


[EDIT=herbivore]Die Bilder leider nicht mehr verfügbar. Daher Bilder statt sie über [****IMG] einzubinden bitte immer als Dateianhang hochladen. Vielen Dank![/EDIT]

Warum erscheinen dort dann doch manchmal die Originalbuttons von Windows?
Beim ersten Beispiel ist das trivial zu demonstrieren, es passiert bei mir immer wenn ich zum ersten Mal mit der Maus ueber diese Region fahre.
Beim zweiten Beispiel ist es schwieriger zu triggern, scheint erst nach Aktivierung/Deaktivierung von Buttons (Beispiel: Maximieren) zu passieren, ebenfalls dann sobald man mit der Maus ueber diesen Bereich faehrt.

Ideen, wieso das passiert und wie man das unterdrueckt?

03.05.2007 - 15:25 Uhr

Mahlzeit.

In einer weiteren Folge in der Reihe "Ben verzweifelt an GUIs" stellen wir heute folgendes Problem vor:


SizeF layoutArea = this.FormTitlePanel.ClientSize;
StringFormat format = new StringFormat();
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
format.FormatFlags = StringFormatFlags.NoWrap;
SizeF measuredSize = g.MeasureString(model.FormClass, this.Font, layoutArea, format, out charsFitted, out linesFilled);

int x = (int)((layoutArea.Width - measuredSize.Width) / 2);
int y = (int)((layoutArea.Height - measuredSize.Height) / 2);
Point titlePosition = new Point(x, y);

g.DrawString(model.FormClass, this.Font, Brushes.Black, titlePosition, format);     

Das steht u.a. in meinem Paint Event. Die errechnete Position soll eigentlich dafuer sorgen, dass der Text zentriert gezeichnet wird. Wenn ich mir die Werte im Debugger anschaue, dann sieht das zumindest halbwegs okay aus. Die Berechnung muesste ja nun auch nicht so schwer sein..?
Endergebnis ist jedenfalls, dass der String immer in der linken oberen Ecke des Controls auftaucht.

Was mach ich falsch? Wo ist mein Brett vorm Kopf, diesmal?

Danke,
Ben

30.04.2007 - 18:38 Uhr

Uhm. Ernsthaft? Ich will doch nichts grosses, ich will nur sagen das Panel X jetzt bitte eine Farbe hat die nicht von irgendwem extra vorgesehen wurde. Ohne das Panel extra als UserControl selbst zu bauen oder in meiner Applikation fuer jede Componente die Farbe manuell/im Code zu setzen..

30.04.2007 - 18:30 Uhr

Das waere wieder genauso wie bei Frischs Antwort per Code. Kann ich nicht irgendwo im Designer mit nem lustigen Colorpicker die Farbe einstellen die ich jetzt als BackColor haben will?

30.04.2007 - 18:16 Uhr

Sorry, ich war vermutlich ungeschickt in der Formulierung:
Gibt es einen Weg im DesignMode eine Farbe zu benutzen die nicht in der System- oder Webpalette steckt? Wie?
Danke fuer die schnelle Antwort jedenfalls.

30.04.2007 - 17:59 Uhr

Mahlzeit.
Schonmal vorneweg den "Sicherlich ist es wieder nur ein Wald vor lauter Baeumen Problem" Disclaimer.

Unbeschlagen wie ich in GUI Sachen bin "darf" ich trotzdem gerade hier eine Windows.Forms Applikation bauen. Jetzt muss ich fuer diverse Controls diverse Corporate Identity Farben nutzen - und die sind weder Teil der Window Systempalette noch Teil der "Web"-Palette.
Ich erwarte/hoffe/denke, dass ich irgendwo eigene Farben als Resource hinterlegen kann, aber selbst mit dieser Hoffnung und viel Geduld spuckte mir Google bisher nichts brauchbares aus.
Wie also kann ich wohl eine simple RGB Farbe einbauen? Sorry, es muss easy sein, aber ich bin echt unfaehig gerad den Weg zu finden..

26.04.2007 - 14:19 Uhr

Danke fuer die fixe Reaktion. Werde ich mich direkt mal mit beschaeftigen, obwohl ich den Zusammenhang zwischen vorne/hinten und nebeneinander nicht so wirklich begreife gerad..

26.04.2007 - 14:07 Uhr

Mahlzeit.

Ich habe folgendes in einem Form (schematisch):


----------------------------|
|UserControl       | Panel  |
|                  |        |
|                  |        |
----------------------------|

Wenn ich das UserControl auf DockStyle.Fill und das Panel auf DockStyle.Right stelle, dann passiert das was ich erwarte: Das Panel hat eine feste Breite, das UserControl frisst den Rest.
Wenn ich es umgekehrt mache (UserControl DockStyle.Left, Panel DockStyle.Fill), dann waechst das Panel auf Formgroesse und liegt damit zum grossen Teil unter meinem UserControl.
Warum?

Danke im voraus, ich gehe zu ich bin auf diesem GUI Gebiet eher weniger beschlagen..

Edit: "Schema" angepasst..

24.04.2007 - 17:43 Uhr

Hast du die Frage nicht quasi selbst beantwortet? Wo ist denn dein Problem?

24.04.2007 - 11:33 Uhr

FZelle:
Nein, weil das eine Gesamtanwendung ist (das 3rd Party Zeug) und dort Assemblies, DLLs und Resourcen lustig in einer Verzeichnisstruktur verteilt sind und zudem davon ausgehen, dass alles relativ zum eigenen Platz liegt.

Tom:
Meine Assemblies sind ja in dem richtigen Verzeichnis gelandet. Trotzdem wurde aber beim debuggen eine Version aus <projectPath>\Releases\Debug gestartet und genau das war mein Problem.

Interessanterweise ist das Problem aus meiner Sicht auf VS Express beschraenkt. Mit dem VS Team Edition auf meinem Firmenlaptop kann ich debuggen, so wie ich es erwarte. Moeglicherweise liegt es daran, dass ich bei VS Express keine unterschiedlichen Profile fuer Debug/Release sehe/konfigurieren kann?

Wie auch immer - mit SD 2.1 oder VS > Express ist mein Problem ja geloest.

23.04.2007 - 13:33 Uhr

Update2:
SharpDevelop 2.0 benimmt sich und tut was es soll.. Also ab in die Tonne mit VS, zumindest aktuell.

23.04.2007 - 12:54 Uhr

Update: Wenn ich das linking/binding log einschalte, dann sehe ich dass lustigerweise meine Verweispfadangaben ignoriert werden. Wofuer genau gibt es die Einstellung Verweispfade in den Projektsettings, wenn sie augenscheinlich ignoriert wird?

Sorry wenn mein Ton hier wir ein rant klingt, aber langsam (seit .. 4 Stunden..) kommt mir die Galle hoch.

Mal ein echtes (und nur grob maskiertes) Beispiel:

=== Pre-bind state information ===
LOG: User = Ich
LOG: DisplayName = Interfaces, Version=0.0.0.0, Culture=neutral, PublicKeyToken=hexcode
(Fully-specified)
LOG: Appbase = file:///C:/Privat/Develop/UserControls/ControlTest/bin/Debug/
LOG: Initial PrivatePath = NULL\r\nCalling assembly : ControlTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: Interfaces, Version=0.0.0.0, Culture=neutral, PublicKeyToken=hexcode
LOG: Attempting download of new URL file:///C:/Privat/Develop/UserControls/ControlTest/bin/Debug/Interfaces.DLL.
LOG: Attempting download of new URL file:///C:/Privat/Develop/UserControls/ControlTest/bin/Debug/Interfaces/Interfaces.DLL.
LOG: Attempting download of new URL file:///C:/Privat/Develop/UserControls/ControlTest/bin/Debug/Interfaces.EXE.
LOG: Attempting download of new URL file:///C:/Privat/Develop/UserControls/ControlTest/bin/Debug/Interfaces/Interfaces.EXE.

Warum zur Hoelle dieser Pfad, wenn
a) ich eingestellt hab, dass mein Binary dort landen soll wo die gewuenschte DLL ist?
b) ich in den Verweispfaden den entsprechenden DLL Pfad ebenfalls angegeben hab (und muesste der dann nicht in einer .config abgelegt werden, oder ist das nur eine temporaere Umgebungseinstellung)?

Danke fuer jede Hilfe.

23.04.2007 - 12:28 Uhr

Nein. Ich benutze nur DLLs aus der 3rd Party Geschichte. Da gibt es kein Executable, dass ich starten will/koennte. Trotzdem ist es gefordert, dass

  1. meine Binaries in dem Applikationsverzeichnis der 3rd Party Anwendung landen
    Klappt ja..

  2. ich mein WinForms Projekt auch von dort starten/debuggen kann
    Klappt aergerlicherweise nicht.

23.04.2007 - 12:15 Uhr

Moin.

Ich scheine gerade ein mittelgrosses bis riesiges Brett vor dem Kopf zu haben. Struktur meiner Umgebung:

  1. C:\Irgendwo\Projekt\EineLibrary
    enthaelt ein Projekt in dem es ledigleich eine Sammlung von CustomControls gibt

  2. C:\Irgendwo\Projekt\EinTestForm
    enthaelt ein Testform, dass in der gleichen Solution wie die Library ist und das Control benutzt

  3. C:\Program Files\EineApplikation
    enthaelt dll Dateien einer 3rd Party Anwendung die ich einbinden muss.

Idee:
Der 3rd Party Hersteller erwartet, dass Anwendungen die seine Schnittstelle benutzen im dem Verzeichnis landen. D.h. ich habe fuer beide Projekte eingestellt, dass dort meine Binaries landen. Tun sie auch.

Problem:
Wenn ich debuggen moechte, dann ist das VS einfach nicht dazu zu ueberreden, die Binaries (lies: Mein Form) in genau DEM Verzeichnis (Nr. 3) zu starten. Meine Einstellungen fuer das Arbeitsverzeichnis (Nr. 3) beim debuggen werden scheinbar ignoriert, meine Einstellungen fuer Verweispfade (zur Sicherheit ebenfalls Nr. 3) helfen scheinbar ebensowenig. Beim Start der Anwendung erhalte ich eine FileNotFoundException beim laden der 3rd Party Libraries. Environment.CurrentDirectory ist korrekt auf das Verzeichnis gesetzt, gestartet wird das Projekt jedoch hohlerweise aus dem von mir nicht gewollten 1)\Release\Debug Pfad und das ist entsprechend auch der Application.StartupPath.
Wenn ich das Binary selbst in 3) starte, dann geht es. Nur debuggen nicht.
Wie kann ich das aendern? Mein Blutdruck geht gerade arg hoch bei so einem Problem..

20.04.2007 - 15:50 Uhr

\w enthaelt Buchstaben und den _
\W entsprechend all das nicht.

Wenn das hier keinen Unterschied macht, dann wuerde ich der Lesbarkeit halber lieber \W allein empfehlen anstatt die lookahead syntax zu nutzen. Die Klammern bei herbivores Tipp rund um ?!\w waren da uebrigens Pflicht..

\s(\d+)\w

sollte also genuegen.

05.04.2007 - 11:54 Uhr

Pure Neugier:
Wofuer die (negativen) Lookaheads? "(?! ... )"?

04.04.2007 - 16:05 Uhr

DarKlajid, Belkelel..
Wenn man nach "DarKlajid" oder "Dar-Klajid" sucht, findet man weltweit eigentlich nur mich. Traurigerweise gibt es natuerlich Ausnahmen der Regel genau dort, wo der Name urspruenglich herkommt:
In DSA-Foren macht man mir den Namen ab und an streitig (ich argumentiere immer damit, dass ab einer gewissen Schreibfehleranzahl in DSA Themen ich nicht mehr der Verfasser sein kann.. 😉 ). Ansonsten jedoch ist dieser Name eindeutig genug um ihn ueberall zu fuehren. Von den 2-3 DSA-Foren abgesehen wo er nicht "mein" ist hab ich ihn nur bei WoW nicht erhalten..

Bei DSA (Das schwarze Auge, wohl das groesste deutsche Pen&Paper Rollenspielsystem, leider oft als "Nur fuer Anfaenger und Kinder" verschrien - ich spiel es seit 12+ Jahren..) ist Dar-Klajid einer der 12 Erzdaemonen, vielfach weiblich dargestellt..

04.04.2007 - 10:40 Uhr

XML/HTML etc. sind meist/fast immer nicht wirklich sinnvoll im Zusammenhang mit RegExps.. Wenn du es vermeiden kannst, dann nimm lieber etwas, dass auch XML versteht. XSLT?
Ansonsten glaube ich nicht, dass deine Expression so funktioniert..

04.04.2007 - 10:32 Uhr

MSDN, Array.Copy()

04.04.2007 - 09:54 Uhr

Original von LonelyPixel
Hab ich Gtk# oder wie? ... Ja, ich glaub hier bin ich irgendwie falsch.

Weiss ich nicht ob du das hast. Aber das gibt es auch fuer Windows, ja.
Wenn du nicht lesen magst, bist du hier ggf. falsch, moeglich.

04.04.2007 - 09:52 Uhr

Moin.

Mein Arbeitgeber war bereit in Weiterbildung zu investieren (insbesondere weil wir einen Projektmanager jetzt wieder auf eigenen Wunsch in die Programmierung zurueck beordern). 3 Leute inklusive meinem einen wurden ausgewaehlt an einer Schulung teilzunehmen. Alle haben gute bis sehr gute .Net 1.1 Kenntnisse, bei .Net 2.0 Neuerungen unterscheiden wir uns (von "ein wenig" bis "eig. alles schonmal genutzt")..

Grundidee war, dass wir in fortgeschrittenen Programmiertechniken (das hiess fuer mich: Pattern, Design, Tipps rund um trickreichere Dinge wie Multithreading etc.) geschult werden.

Jetzt sitze ich den dritten Tag in Berlin (bis morgen geht's noch), kann inzwischen Delegates und Generics nutzen (...) und habe vor mir einen Schulungsorder mit 1:1 geklauten Inhalten aus dem OpenBook links.

Fazit: Sorgfaeltig informieren bevor man eine Weiterbildung bucht. Keine Ahnung wann mein Arbeitgeber das naechste Mal Geld ausgeben mag, aber das hier war eher fuer wenig gut. Immerhin ist die Stadt schoen und ich hab nen Internetzugang...