Laden...

Forenbeiträge von franky Ingesamt 29 Beiträge

13.08.2007 - 15:37 Uhr

Hallo zusammen,

ich habe ein Problem mit einem Form mit dem FormBorderStyle: FixedToolWindow.
In Titelleiste werden eigene Buttons gezeichnet. Bei einem Button soll die Minimieren - Funktion nachgebildet werden. d.h. die ClientSize bekommt eine neue Grösse z.B. 150 x 0. Die Clientarea sollte also nicht mehr sichtbar sein. Tatsächlich werden aber immer 12 Pixel in der Clientarea stehen gelassen (150x12).

Kann ich das Fenster kleiner bekommen, sodass die Clientarea nicht mehr sichtbar ist?

Danke und Gruss Frank

08.08.2007 - 11:28 Uhr

Hallo zusammen,

ich habe ein kleines Problem mit den Elementvorlagen. Ich habe eine Reihe von Dateien erstellt und in die *.vstemplate - Datei eingetragen. Die Dateien liegen auch in Unterordnern. Wenn ich nun eine Zip - Datei erstelle und in den Template - Ordner stelle, wird mir die Vorlage angezeigt.
Will ich nun die Vorlage direkt dem Projekt zuordnen (also auf das Projekt, rechtsklick, Hinzufügen,Neues Element...), passiert nix. Erstelle ich einen Unterordner und füge dann die Vorlage hinzu, dann werden meine Dateien hinzugefügt ???

Hier die *.vstemplate


<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item">
  <TemplateData>
    <DefaultName>blabla.cs</DefaultName>
    <Name>blabla</Name>
    <Description>blabla</Description>
    <ProjectType>CSharp</ProjectType>
    <SortOrder>1</SortOrder>
    <Icon>_my.ico</Icon>
  </TemplateData>
  <TemplateContent>
    <References>
      [...]
    </References>
    <!-- Unterverzeichnis erzeugen-->
    <Folder Name="Folder1">
      <!-- Unterverzeichnis Resources erzeugen-->
      <Folder Name="Resources">
        <ProjectItem SubType="" TargetFileName="bild.png">bild.png</ProjectItem>
      </Folder>
      <ProjectItem SubType="UserControl" TargetFileName="UC1.cs" ReplaceParameters="true">UC1.cs</ProjectItem>
      <ProjectItem SubType="Designer" TargetFileName="UC1.Designer.cs" ReplaceParameters="true">UC1.Designer.cs</ProjectItem>
    </Folder>
    <!--Form -->
    <ProjectItem SubType="Form" OpenInEditor="true" TargetFileName="$fileinputname$.cs" ReplaceParameters="true">frm.cs</ProjectItem>
    <ProjectItem SubType="Designer" TargetFileName="$fileinputname$.Designer.cs" ReplaceParameters="true">frm.Designer.cs</ProjectItem>
    <ProjectItem SubType="" TargetFileName="$fileinputname$.resx" ReplaceParameters="true">frm.resx</ProjectItem>
  </TemplateContent>
</VSTemplate>

In den Code-Dateien wird der Namespace mit $rootnamespace$ bzw. der Name des Forms mit $fileinputname$ gesetzt. Im Form frm ist das UserControl UC1 enthalten. Da ich keine using - Direktive benutze, rufe ich das Control [...]$rootnamespace$.Folder1.UC1[...]

Was mache ich falsch?

Danke und Gruss Frank

23.07.2007 - 17:02 Uhr

Hallo,

hast du Satellitenassemblies erstellt?

Das "Standard"-Vorgehen bei der Lokalisierung würde ich so skizzieren:

  1. Die Steuerung der Sprache erfolgt über den Thread (System.Threading.Thread.CurrentThread.CurrentUICulture)

  2. In deinem Basisassembly ist immer die Standard-Sprache vorhanden.

  3. Für jede unterstützte Kultur wird ein eigener Ordner erstellt, in den die Satellitenassemblies (*.resources.dll) kommen. (gleicher Pfad wie Basisassembly)

Nun wird zu Laufzeit die Sprache geladen, welche in CurrentUICulture steht. Sollte diese Sprache nicht unterstützt werden, setzt der FallBack-Mechanismus ein.

Um den RessourcenManager musst du dich nicht selbst kümmern. Für Formulare und UserControls gibt es die Eigenschaft "Localizable". Diese muss auf true gesetzt werden. Der Designer trägt dann alles von selbst ein. Bitte auf "hartcodierte" Strings verzichten und in eine ResX - Datei schreiben.

Gruss Frank

23.07.2007 - 15:28 Uhr

Hallo Geri,

Projekte mit unterstrichen sind ebenfalls lokalisierbar. Es gelten bei der Namenbildung der Projektnamen die selben Richtlinien wie bei "normalen" Dateien auch.

Wie lokalisierst du deine Projekte?

Gruss Frank

25.05.2007 - 14:46 Uhr

Hallo,

wenn ein Text sich in der richtextbox ändert, wird ein textchanged-Event gefeuert. An dieses Event musst du dich dranhängen und kannst so den Text der einen richtextbox in die andere transferieren.

gruss frank

22.11.2006 - 10:36 Uhr

Hallo zusammen,

ich habe mal eine Frage zur Lokalisierung von Enums, die vom System bereit gestellt werden.

Zum Problem: Ich habe einen eigenen FontDialog geschrieben. Bei der Auswahl des Schriftschnitts (über eine ListBox) erscheinen die englischen Bezeichner, also Bold,Italic und Regular. Die ListBox befülle ich wie folgt:


lbSchriftSchnitt.Items.Add(FontStyle.Regular);
lbSchriftSchnitt.Items.Add(FontStyle.Bold);
lbSchriftSchnitt.Items.Add(FontStyle.Italic);
lbSchriftSchnitt.Items.Add(FontStyle.Bold | FontStyle.Italic);

Wie bekomme ich die FontStyleNamen lokalisiert, damit ich sie in jeder beliebigen Sprache (wenn die entsprechende Ressourcen vorhanden sind) darstellen kann?

Ein ähnliches Problem habe ich mit SmoothingMode. In einem Propertygrid habe ich eine Smoothingmode - Eigenschaft. Beim Ändern der Eigenschaft werden ebenfalls die englischen Bezeichner angezeigt. Diese möchte ich ebenfalls lokalisieren.
Das Problem ist wohl ähnlich gelagert, wie das FontDialog - Problem...

Danke und Gruss

Frank

11.07.2006 - 09:01 Uhr

Hallo Larsen,

es klappt tatsächlich 😮)

Allerdings muss die Datenstruktur, auf der der XPathNavigator arbeitet der DOM - Baum sein, also ein mischmasch aus XPath und DOM.

'XmlDocument' ist DOM.

[...]
static void Main(string[] args)
{
XmlDocument document = new XmlDocument();
document.Load("test.xml");
XPathNavigator navigator = document.CreateNavigator();

     XPathNodeIterator nodeItor = navigator.Select(&quot;A/B[@Name = &#39;TEST3&#39;]&quot;);  
     if (nodeItor.Count &gt; 0)  
     {  
        while (nodeItor.MoveNext())  
        {  
           //Hier löschen ... DeleteSelf() tut nicht???  
        }  
     }  
     XmlWriter writer = XmlWriter.Create(&quot;out.xml&quot;);  
     navigator.MoveToRoot();  
     navigator.WriteSubtree(writer);  
     writer.Close();  
  }  

[...]

Die Xml - Datei test.xml ist deinen Xml - Bsp.

Kannst ja mal mit der main rumspielen und schau'n, ob du den momentanen Knoten gelöscht kriegst.

Falls du es schafft, kannst du mir ja mal den Code schicken....

Gruss Frank

Gruss Frank

10.07.2006 - 15:46 Uhr

Hallo,

XPath ist nur eine XML - Abfragesprache, d.h. du kannst nur Knoten abfragen.

Da du Knoten lesen und editieren möchtest, solltest du eher DOM zum Lesen und Schreiben verwenden (oder den XmlSerializer).

Gruss Frank

13.06.2006 - 14:34 Uhr

Danke euch für die Antworten. Ich werde es gleich mal testen...

Gruss Frank

13.06.2006 - 10:22 Uhr

Hallo zusammen,

ich habe ein Problem mit der Globalization. Und zwar habe ich ein XML - Dokument, in dem u.a. Double- Werte stehen. Dieses Dokument wird zum Datenaustausch verwendet. Das Poblem ist der Dezimaltrenner. Wie kann ich erkennen, in welcher Dezimaltrenner verwendet wird?

Ich hatte mir schon 2 Lösungsansätze überlegt, die mir aber beide nicht sonderlich gut gefallen:

  1. ich führe im XML- Dokument ein Tag mit, dass CulturInfo speichert ("de-DE",...).
  2. ich lasse mittels Applikation.CultureInfo nur eine Ländereinstellung zu, wobei das Problem dann sicherlich wieder für z.B. englische Nutzer das Komma als Dezimaltrenner sein wird.

Habt ihr noch andere Ideen?

Danke und Gruss Frank

06.04.2006 - 15:45 Uhr

Hat sich gerade erledigt ...

Ich musste

[XmlElement(IsNullable=true)]
public Code[] Code = null;

voranstellen.

Gruss Frank

06.04.2006 - 15:27 Uhr

Hallo,

ich habe in kleines Problemchen. Ich habe ein Objekt und möchte dieses serialisieren. Ist soweit auch kein Problem, nur bei Arrays möchte ich die Ausgabe etwas andert haben.

So sieht die Ausgabe aus ....

<Parameter ParmType="Code">
<Enum>
<Code>
<Code>3</Code>
<Code>4</Code>
<Code>5</Code>
<Code>6</Code>
<Code>7</Code>
</Code>
</Enum>
</Parameter>

... die Ausgabe sollte aber so aussehen ...

<Parameter ParmType="Code">
<Enum>
<Code>3</Code>
<Code>4</Code>
<Code>5</Code>
<Code>6</Code>
<Code>7</Code>
</Enum>
</Parameter>

Meine Klassen sehen wie folgt aus:

public class Parameter
{
[XmlAttribute]
public String ParmType;
public MyEnum Enum = null;
[...]
}

public class MyEnum
{
public Code[] Code = null;
[...]
}

Wie Muss ich die Klasse 'Code' kennzeichnen, damit ich direkt nach dem EnumTag meine CodeTags mit Werten bekomme?

Danke für eure Hilfe

Gruss Frank

03.08.2005 - 08:17 Uhr

Hallo,

ich habe ein TreeView-Control, allerdings das von dotNetMagic, in dem die Texte bei Fettschrift gestaucht dargestellt werden. Zeige ich die Texte normal an, sind sie nicht gestaucht.(siehe Bild im Anhang).

Ich stelle manche Knoten in Fettschrift und andere Normal dar. Beim Erzeugen des Knotens weise ich die Fettschrift zu

tc[i].NodeFont = new Font(this.Font.FontFamily.Name,this.Font.Size,FontStyle.Bold); 

...,sonst die im Designer gewählte Schrift (FontStyle.Regular).

Wechsle ich in den Editiermodus eines gestauchten Knotens, dann werden die Buchstaben mit korrekten Abständen dargesellt...?!?

Das Problem scheint auch unabhängig vom Schrifttyp zu sein.

Hatte schon mal jemand ein ähnliches Problem?

Danke und Gruss Frank

29.07.2005 - 13:05 Uhr

Hallo,

habe das Problem erkannt, aber keine Lösung parat.
Ich schau's mir nochmal an...

Gruss Frank

29.07.2005 - 10:30 Uhr

Ist noch etwas ausbaufähig, und nur als Idee gedacht *gg

29.07.2005 - 10:20 Uhr

>wenn ich hart aligntoright auf true setze

setze es mal auf false ...

Ich kann bei mir den Header linksbündig und die Rows darunter linksbündig setzen.

Ich darf dir den Code nicht schicken 😮) aber ich versuche mal das o.g. Bsp zu editieren.

Gruss Frank

29.07.2005 - 08:35 Uhr

Hallo,

schau dir mal folg. Source an :

http://64.78.52.104/faq/winforms/Files/datagridcellxcellenable.zip

setze im Designer dein Alignment auf Center und in der OnPaint Methode kann du die Var. alignToRight ändern auf rechts- oder linksbündig.

Gruss Frank

....Du kannst es auch in der DataGridEnableEventArgs-Klasse ändern....

26.07.2005 - 10:32 Uhr

Hallo,

ich hatte mal ein ähnliches Problem und habe es mit axialis gelöst.
Mit diesem Prog kannst du bmp's importieren, transparente Farbe setzen und als *.ico speichern.

Kann es aber gerade nicht nachvollziehen, da die 30-Tage-Testversion abgelaufen ist 😮)

Gruss Frank

22.07.2005 - 09:49 Uhr

jaja, da war doch mal was mit Wald und Bäumen, oder 😁

22.07.2005 - 09:40 Uhr

Moin moin,

meintest du sowas:

System.Diagnostics.Process.Start(@"ProgrammPfad",@"ArgumentPfad"); 
18.07.2005 - 13:36 Uhr

Hallo,

da war ich wohl doch etwas vorschnell, ich habe nach der Spaltengenerierung nochmal ein datagrid.readonly = true drin stehen, sorry.

Bekomme ich den Editiermode bei den readonly auch noch weg?

18.07.2005 - 13:28 Uhr

Hallo Noodles,

habe ich genau so gemacht.

Hier etwas Code einer Spalte ...



DGStyle = new DataGridTableStyle();
DGStyle.MappingName = "myTable";

GridTextColumn = new DataGridTextBoxColumn(pcol["***"]);
GridTextColumn.MappingName = "***";
GridTextColumn.HeaderText = "***";
GridTextColumn.ReadOnly = false;
GridTextColumn.Width = 150
DGStyle.GridColumnStyles.Add(GridTextColumn);

aber die entsprechende Spalte ist immernoch readonly?
(bzw. der Editiermodus noch vorhanden)

Danke und Gruss Frank

18.07.2005 - 13:02 Uhr

Hallo,

ich habe ein Datagrid, ind dem ich einen Datatable eingebaut habe (mit 5 Spalten).
Mein Problem ist nun, das wenn ich eine Zelle anklicke, das Programm immer in den Editiermodus mit gegrautem Hintergrund springt.

Nun möchte ich aber gerne,

  1. dass eine Zelle geklickt (auch gesoftklickt) werden kann, ohne dass in den Etitiermodus gesprungen wird.

und 2. eine Möglichkeit, nur eine Spalte zu editieren freigegeben wird.

Ist soetws Möglich? gibt es evtl. schon Code der sowas macht?

Besten Dank

Gruss Frank

06.07.2005 - 12:34 Uhr

Hallo,

ich wollte mal fragen, ob es möglich ist den KnotenText im TreeView mehrfarbig darzustellen?

Der Grund ist, dass sich bei meinem Bsp der Knoten aus 3 Parametern zusammensetzt und man nach einem Parameter sortieren kann.

Der Knoten sieht also so aus:

Knoten.Text = "Parameter1 Parameter2 Parameter3"

Ich möchte gerne den Parameter, der aktuell sortiert ist in FettSchrift anzeigen.

Danke und Gruss Frank

30.06.2005 - 08:38 Uhr

moin,

dann deaktiviere doch die VScrollbar und implementiere sie selbst.

Dann könntest du das Control wieder in ein Panel packen, VScrollBar dazu und über die Scrollbar die Location des Controls steuern.
(Nur so als Idee)

Gruss Frank

29.06.2005 - 11:29 Uhr

Hallo,

packe doch das untergeordnete Control in ein Panel und dann kannst du die Location des Controls im Panel verschieben, ohne die Position den Panels zu verändern.

Gruss Frank

29.06.2005 - 11:06 Uhr

Hallo,

das sollte helfen:

this.Control.Location = new Point(0,100); // Nach unten scrollen
this.Control.Location = new Point(0,-100); // Nach oben scrollen

Gruss Frank

28.06.2005 - 13:08 Uhr

Hallo,

fehlt vielleicht noch ein Verweis auf die DLL?

Gruss Frank

24.05.2005 - 15:57 Uhr

Hallo,

ich habe ein kleines Problem mit der winapi. Ich habe zu einem bestehenden Programm einen neuen Dialog in c# geschrieben. Das "alte" Programm ist in c geschrieben. Um mit c zu arbeiten, musste ich über c++ den Datenaustausch zwischen den beiden Sprachen regeln.

Nun habe ich mit SetParent(hWndChild,hWndParent) meinen erstellten Dialog bzw. das Fenster dem "alten" Programm unterstellt.

Mein Problem ist nun, dass ich das Fenster nicht aus dem Parent "rausziehen" kann.
Ich hätte gerne, das mein Dialog sich wie ein Kindfenster verhält, aber zusätzlich noch aus dem Parentfenster rausgezogen werden kann (z.B. für 2-Bildschirm-Systeme).

Wie geht das????

Codeteil des Hauptfensters (C):


[...]
GhwndMain = CreateWindow("name", Gapptitel,
           WS_OVERLAPPEDWINDOW | WS_MAXIMIZE | WS_CLIPCHILDREN ,
           CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
           (HWND) NULL, (HMENU) NULL, Ghinst, (LPVOID) NULL);
[...]

Im C#Teil habe ich CreateParams überschrieben(hätte ich aber wahrscheinlich nicht gebraucht...)


protected override CreateParams CreateParams        
      {
         get
         {
            CreateParams createParams = new CreateParams();
            
            // Define the screen position and size
            createParams.X = this.Location.X;
            createParams.Y = this.Location.Y;
            createParams.Height = this.Size.Height;
            createParams.Width = this.Size.Width;

            // As a top-level window it has no parent
            System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("name"); 
            createParams.Parent = processes[0].MainWindowHandle;
            
            // Appear as a pop-up window

            createParams.Style = unchecked((int)NETClasses.API.WindowStyles.WS_POPUP +
                                             (int)NETClasses.API.WindowStyles.WS_OVERLAPPED +
                                             (int)NETClasses.API.WindowStyles.WS_CAPTION + 
                                             (int)NETClasses.API.WindowStyles.WS_SYSMENU + 
                                             (int)NETClasses.API.WindowStyles.WS_THICKFRAME +
                                             (int)NETClasses.API.WindowStyles.WS_MINIMIZEBOX
               );
            
            createParams.ExStyle = (int)NETClasses.API.WindowExStyles.WS_EX_APPWINDOW +
               (int)NETClasses.API.WindowExStyles.WS_EX_TOPMOST;

            return createParams;
         }
      }

Danke und Gruß

franky