Dank juetho, OEMperiod war das, was ich gesucht habe.
Hallo,
mich würde auch interessieren, welche Taste für '.' verwendet wird.
Hallo,
wie kann man den HotSpot eines Cursors setzen, den man mit:
new Cursor(IntPtr)
angelegt hat?
Hallo b-man,
du bekommst das Objekt, welches das Event gefeuert hat im Objekt sender geliefert.
Mit
TextBox tb = (TextBox)sender;
bekommst du die Textbox.
Hallo DDenjo,
das hier sollte dir helfen:
[FAQ] Kommunikation von 2 Forms
Eine Frage hätte ich noch:
Ich habe jetzt das objekt XmlSchema. Darin finde ich ein Element.
Wie kann ich durch das Schema navigieren, damit ich an alle Elemente gelange?
Hallo svenson,
bei mir gehts jetzt auch. Ich lese aus einem Stream und hatte vergessen dessen Position vorher auf 0 zu setzen. Sorry!
Hallo svenson,
mit XmlSChema.Read habe ich es schon versucht, bekomme dabei aber eine Exception:
System.Xml.XmlException : "Root element missing."
Ich möchte aus folgender XSD-Datei:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:element name="rootElement">
<xsd:annotation>
<xsd:documentation>Beschreibung root</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="childElement1">
<xsd:annotation>
<xsd:documentation>Beschreibung childElement1</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>Beschreibung childElement1</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="childElement11" type="xsd:string"/>
<xsd:element name="test3" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="childElement2" minOccurs="0" maxOccurs="999">
<xsd:annotation>
<xsd:documentation>Beschreibung childElement2</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="childElement21" type="xsd:decimal"/>
<xsd:element name="childElement22">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="test" type="xsd:decimal"/>
<xsd:element name="test2" type="xsd:decimal"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="childElement3" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>Beschreibung childElement3</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:sequence>
<xsd:element name="childElement31" type="xsd:integer"/>
<xsd:element name="childElement32" type="xsd:time"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="childElement4" minOccurs="0">
<xsd:annotation>
<xsd:documentation>Beschreibung childElement4</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="attribute41" type="xsd:string" use="required"/>
<xsd:attribute name="attribute42" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="childElement5" minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation>Beschreibung childElement5</xsd:documentation>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="attribute51" type="xsd:string" use="optional"/>
<xsd:attribute name="attribute52" type="xsd:string" use="optional"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>
folgende Baumstruktur erstellen:
rootElement
-childElement1
--childElement11
--test3
-childElement2
--childElement21
--childElement22
---test
---test2
-childElement3
--childElement31
--childElement32
-childElement4
--childElement41
--childElement42
-childElement5
--childElement51
--childElement52
(- bedeutet eine Ebene)
Hallo,
ich möchte eine XSD-Datei einlesen und die in der Datei definierte Struktur in einem TreeView darstellen.
Mein Problem ist das Einlesen der XSD-Datei.
Ich habe es mit einem Dataset probiert, dass hilft mir allerdings irgendwie nicht weiter, da ich dort nur flache Strukturen bekomme, aber keine beliebig tief geschachtelte Baumstruktur (bitte korrigieren, wenn ich falsch liege).
Dann habe ich es mit XmlReader versucht, bekomme damit aber eine Exception, dass kein Root-Element gefunden wurde.
Muss ich die XSD per Hand parsen oder gibt es in .Net Klassen, die mich dabei unterstützen?
Wer kann mir Tipps geben, wie ich an das Problem herangehe?
Vielen Dank.
TextAlign gibt nur die Ausrichtung von text innerhalb eines ToolStripItems an.
Um die ToolStripItems auszurichten muss du folgendes verwenden:
ToolStripItem.Alignment = ToolStripItemAlignment.Right;
Die Eigenschaft Alignemtn gibt es nicht im VisualStudio-Designer, du musst sie im Code setzen.
Nein, daran kann es nicht liegen.
Was meinst du mit "textbox drücken"?
Du musst den Fokus auf die TextBox setzen, sonst ist der Textcursor nicht sichtbar.
Man kann auch direkt den RTF-Code bearbeiten und dadurch z.B. Farben setzen. Dies geht sehr schnell und man muss nicht mit SelectedXXX arbeiten.
Hallo Ghosti,
also Worddokuemnte dürften nicht so einfach sein, da es ja ein Herstellerspezifisches Format ist. Ich kenne auch kein Steuerelement welches dies von sich aus könnte.
Du müsstest halt mal im Internet suchen, ob zu finden ist, wie eine Worddokument aufgebaut ist.
Hallo fraghenne,
du könntest in KeyDown überprüfen, ob SelectionStart == 1 (oder 0, musst du mal testen) ist und nur dann SelectedText auf "922" setzen
Wenn du in eine textbox schreibst musst du natürlich TextBox.Multiline = true setzen, sonst wird immer nur eine Zeile angezeigt.
Hallo habeKA,
die Zeile in der Schleife müsste eigentlich so aussehehen:
txtDatei.Text += line.Substring(9);
Was ist txtDatei für ein Objekt?
Sorry, aber ich habe immer noch keine richtige Vorstellung, wozu diese Felder da sind und wann, wie und wozu die Zusatzinformationen dargestellt werden.
Wenn die Felder keine eindeutige Bezeichnung im Text haben, bleibt dir wohl nichts anderes übrig als nach jeder Textoperation (TextChanged), den alten und neuen Text zu vergleichen und so die Änderung festzustellen.
Die Felder in der Textbox sind das eindeutige Zeichenketten oder dürfen sie auch mehrfach vorkommen?
Wenn der User also mit der Maus über ein solches Wort fährt, sollen die Zusatzinformationen angezeigt werden?
Hallo Danwe,
ich habe nicht richitg verstanden, was du machen willst.
Vielleicht helfen dir die Ereignisse SelectionChanged und TextChanged weiter.
Ansonsten beschreibe dein Problem mal etwas genauer, vorallem wo die Wörter herkommen, was das für Wörter und wie diese mit den "Zusatzinformationen" verknüpft sind.
Hallo Skukuyen,
das Problem hatte ich auch. Siehe hier: Form, Doppelklick auf Titelleiste
Hallo Danwe,
mit RichTextBox.GetCharIndexFromPosition(Point pt) bekommst du den Index des Zeichens, an der Position pt.
Hallo smichae,
der entscheidende Hinweis wurde dir schon von dN!3L gegeben:
[FAQ] Kommunikation von 2 Forms
Hallo Arthuro,
ich weiß jetzt nicht was dein Problem ist.
ausgabe.Text = vorname + nachname
Also gibt es keine Funktion, die mir von einem Unicode-Zeichen den entsprechenden Unicode-Escapecode liefert?
Hallo herbivore,
ähm, was meinst du mit eintippen?
Hallo él toro,
danke für deine Hinweise.
Wie wandle ich Unicode-Zeichen in die Darstellung \u.... um?
Hallo,
ich habe jetzt noch einmal debugged. Das verhalten bei bestimmten Unicode-zeichen ist wirklich so, wie ich es beschrieben habe.
Als Beweis habe ich mal einen Screenshot gemacht.
Also wenn ich es nicht sehen würde, würde ich es auch nicht glauben.
Hallo talla,
das ü ist auch kein wirkliches Unicode-Zeichen. Damit funktionierts ohne Probleme.
Ich habe zum Testen Zeichen verwendet, die ich mir mit der Zeichentablle aus dem Windowszubehör erstellt habe.
Hallo herbivore,
mir kommt das auch ziemlich absurd vor, aber ich habe debugged und da hatte ich das oben beschriebene Verhalten.
Mit "normalen" Zeichen funktionierts ja auch, wenn ich aber echte Unicode verwende gehts nicht.
Ich werde morgen nocheinmal debuggen und sehen, ob das Verhalten wirklich so ist, oder ob ich irgendwo was übersehen habe.
Hallo,
ich habe ein seltsames Problem mit einem Unicode-String.
int iIndex = str1.IndexOf(str2);
str1 beginnt mit einem Zeilenumbruch ('\n') gefolgt von einem Unicode-Zeichen.
str2 enthält nur das Unicode-Zeichen.
Also sollte doch iIndex == 1 sein, es ist aber 0.
Hat jemand eine Idee, woran das liegen könnte?
Hallo,
wie kann ich feststellen ob meine Anwendung für ein bestimmtes Verzeichnis Schreibrechte hat?
Danke!
Eine Frage hätte ich noch.
Bekomme ich irgendwie raus, ob meine Anwendung in einem bestimmten Verzeichnis Schreibrechte hat?
Danke winSharp93, das hilft mir weiter.
Die Datei muss sich nicht im Programmverzeichnis befinden. es wäre für mich aber einfacher, da ich das Programm nicht anpassen müsste. 🙂
Gibt es unter Vista standardmäßig ein Verzeichnis, wo alle Benutzer Lese- und Schreibrechte haben?
Hallo JuyJuka,
gibt es keine andere Möglichkeit?
Es gibt doch diese Manifest-Datei. Diese habe ich wie hier
Vista: Manifest in Anwendung einbinden
beschrieben eingebunden, allerdings mit dem gleichen Ergebnis.
Hallo,
wie kann ich meine Anwendung unter Vista mit ADminrechten laufenlassen?
Ich muss in meinem Programmverzeichnis eine Datei anlegen. Wenn ich als Standardbenutzer angemeldet bin, funktioniert das Anlegen der Datei nicht.
(als Admin gehts)
Wie kann ich erreichen, dass mein Programm eine Datei anelegen kann, wenn man als Standardbenutzer angemeldet ist?
Vielen Dank für eure Antworten.
Setze FileNameTemp beim Anlegen einfach auf einen Leerstring.
string FileNameTemp = "";
Vielen Dank, es geht jetzt.
Ich hatte ProcessStartInfo.UseShellExecute auf false gesetzt und dadurch ging es nicht.
Hallo,
ich möchte aus meiner Anwendung heraus ein pdf-Dokument öffnen (so dass der Acrobat Reader sich öffnet und das Dokument anzeigt).
Ich habe es versucht mit Process.Start und ProcessStartInfo.FileName auf das Dokuemtn gesetzt (z.B. c:\temp\test.pdf).
Ich bekomme aber eine Eyxception: Dies ist keine gültige Win32 Anwendung.
Hat jemand eine Idee, wie ich das Problem lösen könnte?
Hallo cytrics,
du musst anstatt ThreadStart, ParameterizedThreadStart verwenden.
Hier das Beispiel aus der Doku:
using System;
using System.Threading;
public class Work
{
public static void Main()
{
// To start a thread using a shared thread procedure, use
// the class name and method name when you create the
// ParameterizedThreadStart delegate.
//
Thread newThread = new Thread(
new ParameterizedThreadStart(Work.DoWork));
// Use the overload of the Start method that has a
// parameter of type Object. You can create an object that
// contains several pieces of data, or you can pass any
// reference type or value type. The following code passes
// the integer value 42.
//
newThread.Start(42);
// To start a thread using an instance method for the thread
// procedure, use the instance variable and method name when
// you create the ParameterizedThreadStart delegate.
//
Work w = new Work();
newThread = new Thread(
new ParameterizedThreadStart(w.DoMoreWork));
// Pass an object containing data for the thread.
//
newThread.Start("The answer.");
}
public static void DoWork(object data)
{
Console.WriteLine("Static thread procedure. Data='{0}'",
data);
}
public void DoMoreWork(object data)
{
Console.WriteLine("Instance thread procedure. Data='{0}'",
data);
}
}
/* This code example produces the following output (the order
of the lines might vary):
Static thread procedure. Data='42'
Instance thread procedure. Data='The answer'
\*/
Sorry, ich hab jetzt nochmal meinen Code angeschaut und hatte natürlich eine Endlosschleife in Get() produziert (else i--😉.
Also, das Problem ist gelöst, die Synchronisation funktioniert jetzt.
Ich habe schon debugged, die Threads warten alle in der Zeile "lock(thisLock)".
Ich habe ja nur die eine Stelle, die mit lock() gesperrt wird. Sonst passiert in meinem Code nichts mehr mit Sperren.
Ih weiß halt nicht, ob es daran liegen kann, dass das Objekt mit dem ich Sperre static ist. Die Klasse und Methoden MDN_DB ist auch static.
Hallo herbivore,
ja, das sind meine einzigen Sperroperationen. Wenn ich nur einen Thread starte, dann läuft dieser wunderbar durch. Doch ab drei Threads, hängt das Programm. Ich hatte es vorher ohne diese Sperren und es ist auch durchgelaufen. Ohne Sperren kann es natürlich zu Problemen beim Dateizugriff kommen, deshalb wollte ich dies mit Semaphoren lösen.
Die andere Variante wäre halt mit FileStreams zu arbeiten und diese exklusiv zu öffnen. Ich dachte aber mit Semaphoren wäre es eleganter, außerdem musste ich meinen Code nicht groß anpassen.
Hallo herbivore,
ich habe es jetzt mal mit lock probiert, aber der Deadlock besteht immer noch.
...
static Object thisLock = new Object();
public static string AccessDB(string str, bool bAdd)
{
string strReturn = "";
lock (thisLock)
{
if (bAdd)
{
Add(str);
}
else
{
strReturn = Get(str);
}
}
return strReturn;
}
Kann es daran liegen, dass die Klasse und Methoden static sind?
Hallo,
ich habe mehrere Threads, die auf eine Datei zugreifen. Diesen Zugriff möchte ich mit der Klasse Mutex synchronisieren.
Dazu verwende ich folgenden Klasse:
public class MDN_DB
{
static string m_strAsynchMDN_FileName = System.IO.Path.Combine(Global.get_global_in_dir(), "AsynchMDN.dat");
static System.Threading.Mutex DBLock = new System.Threading.Mutex();
public MDN_DB()
{
}
public static void Add(string strLine)
{
DBLock.WaitOne();
StreamWriter sw;
if (!File.Exists(m_strAsynchMDN_FileName)) sw = File.CreateText(m_strAsynchMDN_FileName);
else sw = File.AppendText(m_strAsynchMDN_FileName);
sw.WriteLine(strLine);
sw.Close();
DBLock.ReleaseMutex();
}
public static string Get(string strID)
{
string strLine = "";
string strRet = "";
DBLock.WaitOne();
if (File.Exists(m_strAsynchMDN_FileName))
{
string[] strLines = File.ReadAllLines(m_strAsynchMDN_FileName);
int iIndex = -1;
for (int i = 0; i < strLines.Length; i++)
{
if (strLines[i].Contains(strID))
{
iIndex = i;
break;
}
}
if (iIndex != -1)
{
string[] strNewLines = new string[strLines.Length - 1];
for (int i = 0; i < strLines.Length - 1; i++)
{
if (i != iIndex) strNewLines[i] = strLines[i];
else i--;
}
File.WriteAllLines(m_strAsynchMDN_FileName, strNewLines);
DBLock.ReleaseMutex();
strRet = strLines[iIndex];
}
}
return strRet;
}
Die Methoden Add() und Get() werden von verschieden Threads aus aufgerufen.
Doch wenn ich mein Programm lufen lasse, bzw. debugge bekomme ich immer einen Deadlock.
Woran könnte das liegen?
Hallo -=[MAD]=-,
ich habe nur Deutsch und Englisch in meiner Anwendung integriert. Spanisch kann ich deshalb nicht einstellen.
Hallo wiesi,
zu 1.: SelectionStart = CursorPosition-1
SelectionLength = 1
SelectedText = ""
zu 2.: Ich kenne auch keine andere Möglichkeit eine komplette Zeile rauszulöschen.
Dann ist der Name bzw. Pfad falsch. Ist Vielleicht vor dem Pfad ein Leerzeichen? (Fällt beim schnellen drüberblicken oft nicht auf, ist mir nämlich auch schon passiert)