Laden...

Forenbeiträge von punkdevil Ingesamt 992 Beiträge

03.03.2008 - 15:34 Uhr

Danke herbivore, ich habe es gelöst.

03.03.2008 - 14:17 Uhr

Hallo,

irgendwie stehe ich grade auf dem Schlauch.

Ich habe eine Linie gezeichnet und möchte nun den Abstand zwischen dem Mauszeiger und dieser Linie berechnen.

Ich habe also den Start- und Endpunkt der Linie und die Mausposition.

Ich weiß, daß ist Mathe 9. Klasse oder so 🙂

22.02.2008 - 12:36 Uhr

Danke!

Weiß jemand, ob PartCover in Zukunft auch .Net 3.5 unterstützen wird?

22.02.2008 - 09:17 Uhr

Hallo,

ich möchte VisualStudio 2008 Professional Unit Testing verwenden. In dieser Version fehlt aber die Auswertung der CodeCoverage. Gibt es kostenlose Alternativen dazu?

(NCover ist ja auch nicht mehr kostenlos)

22.02.2008 - 08:50 Uhr

Hallo,

ich habe mal gehört, daß, wenn ich für .Net 3.5 entwickle, dann reicht auf dem Anwendungsrechner die CLR 2.0, damit das Programm ausgeführt werden kann. Stimmt das?

15.02.2008 - 13:00 Uhr

Nach stundenlangem probiern und googeln habe ich es jetzt selber rausgekriegt.
Eigentlich ist es ganz einfach 🙂

Man muss für jedes Property die Methoden ShouldSerializeXXX und ResetXXX implementieren (XXX ist der name der Property.

Für meine Anforderung, dass alle Werte nicht fett dargestellt werden sollen reicht es die Methode ShouldSerializeXXX zu implementieren und darin einfach false zurückzuliefern.

Bsp:


public class TreeNodeProperty : TreeNodeCustomTypeDescriptor
    {
        protected  static AbstractTreeNode node;
       
        public string PropertyName
        {
            get { return node.Name; }
            set { node.Name = value; }
        }
        
        public string PropertyText
        {
            get { return node.Comment; }
            set { node.Comment = value; }
        }

        public TreeNodeProperty(AbstractTreeNode node)
        {                   
            this.node = node;                            
        }

        public bool ShouldSerializePropertyName()
        {
            return false;
        }

        public bool ShouldSerializePropertyText()
        {
            return false;
        }

        //public void ResetPropertyName()
        //{
         //     node.Name = "";
        //}
        

    }

siehe:
Defining Default Values with the ShouldSerialize and Reset Methods

14.02.2008 - 13:05 Uhr

Hat niemand eine Idee?

13.02.2008 - 16:54 Uhr

Hallo capcom,

wenn du das Form nicht minimierst, und mit Form.Location die neue Position setzt, dann geht es.

13.02.2008 - 11:57 Uhr

Hallo Andreas,

also SelectedNode habe ich in meinem TreeView überschrieben und es liefert einen AbstractTreeNode zurück.

Aber egal, ich habe es jetzt ohne Zwischenablage gelöst, in dem ich mir halt einfach den AbstractTreeNode merke, der kopiert wurde.

Trotzdem vielen Dank!

13.02.2008 - 11:24 Uhr

Hallo,

ich möchte in einem PropertyGrid die DefaultValue-Eigenschaft zur Laufzeit festlegen.
Dies möchte ich deshalb, damit im PropertyGrid die Werte immer normal (nicht fett), angezeigt werden.

Ich habe eine Klasse von PropertyDescriptor abgeleitet, weiß aber nicht, wie vom PropertyGrid abgefragt wird, ob der aktuelle Wert der Default-Wert ist.

Andere Eigenschaften, wie z.B. IsBrowseable oder Category kann ich setzen, aber nicht den DefaultValue.

Kann mir jemand einen Tipp geben?

13.02.2008 - 09:20 Uhr

Hallo ErfinderDesRades,

klar kann ich es auch anders machen, aber ich dachte über die Zwischenablage ist vielleicht eine elegante Variante.

13.02.2008 - 08:42 Uhr

Guten morgen,

ich bin leider noch nicht weiter gekommen.

Also mit "normalen" TreeNodes gehts.


Clipboard.SetData(DataFormats.Serializable, new TreeNode("Test");
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Serializable))
{
    Object objGet = Clipboard.GetData(DataFormats.Serializable);
    TreeNode node = (TreeNode)objGet;
}

Das Ergebnis ist ein gültiger TreeNode.

Wenn ich dagegen einen Knoten, abgeleitet von TreeNode verwenden:


Clipboard.SetData(DataFormats.Serializable, tv.SelectedNode);
if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Serializable))
{
      Object objGet = Clipboard.GetData(DataFormats.Serializable);
      AbstractTreeNode node = (AbstractTreeNode)objGet;
}

Hier bekomme ich in der letzten zeile eine InvalidCastException: System.IO.MemoryStream kan nicht in AbstractTreeNode gecastet werden.

12.02.2008 - 18:14 Uhr

OK, mit DataFormats.Serializable habe ich es noch nicht probiert. Da habe ich, wie es zum Beispiel im Openbook von Galileocomputing steht, einen String zur Bezeichnung des Formats übergeben.

Ich werde auch mal probieren statt AbstractTreeNode, einfach treeNode zu nehmen.

Ich kann es aber morgen früh erst ausprobieren.

Was halt irgendwie komisch ist, das GetDataPresent true zurück liefert. D.h. ja, das in der Zwischenablage die Daten in dem entsprechenden Format zur Verfügung stehen...

12.02.2008 - 16:55 Uhr

Das hat leider nichts gebracht...

12.02.2008 - 16:35 Uhr

Die Klasse AbstractTreeNode ist abstract. Davon habe ich mehrere Klassen abgeleitet.
Objekte dieser abgeleiteten Klassen sollen in die Zwischenablage kopiert werden.

Ich habe es jetzt exakt wie in dem Link angegeben gemacht:


DataFormats.Format myFormat = DataFormats.GetFormat("AbstractTreeNode");
DataObject obj = new DataObject(myFormat.Name, tv.SelectedNode);
Clipboard.SetDataObject(obj);
IDataObject get= Clipboard.GetDataObject();
AbstractTreeNode node = (AbstractTreeNode)get.GetData(myFormat.Name);

Das Ergebnis ist das gleiche. GetDataPresent(myFormat.Name) liefert true, aber GetData(myFormat.Name) liefert null.

12.02.2008 - 15:47 Uhr

Hallo Andreas,

also, die klasse ist serialisierbar.

und mit


Clipboard.SetData("AbstractTreeNode", obj);

gebe ich ja das Format "AbstractTreeNode" an.

Clipboard.SetData() erwartet ja einen String zur Angabe des Formats und kein DataFormat-Objekt.

12.02.2008 - 14:54 Uhr

Hallo,

ich möchte ein Objekt vom Typ AbstractTreeNode (abgeleitet von TreeNode) in die Zwischenablage kopieren, um es anschließend woanders einzufügen.

Das kopieren in die Zwischenablage mache ich mit folgenden zwei Zeilen Code:


DataObject obj = ((AbstractTreeNode)tv.SelectedNode).GetDataObject();
Clipboard.SetData("AbstractTreeNode", obj);

Wenn ich mir nun später, den AbstractTreeNode wieder aus der Zwischenablage holen möchte bekomme ich null zurück.


Clipboard.GetDataObject().GetData("AbstractTreeNode")

Allerdings die Abfrage, ob Daten in dem angegebenen Format vorliegen ist true:


Clipboard.GetDataObject().GetDataPresent("AbstractTreeNode")

Hat jemand ne Ahnung woran das liegt, bzw. was ich falsch mache?

10.02.2008 - 20:13 Uhr

Hallo Kevka,

zu 2.: Mit TreeNode.Expand() kannst du einen Knoten aufklappen.

08.02.2008 - 22:32 Uhr

Ja, so müsste es funktionieren.

AutoScrollPosition gibt den linken oberen Punkt an. Wenn nicht nach unten gescrolt wurde, dann ist AutoscrollPosition 0,0. Wenn nach unten gescrollt wird, dann schiebt sich die linke obere Ecke ja aus dem Bild nach oben raus und damit ist dieser Punkt realtiv zur aktuellen oberen linken Ecke negativ.

08.02.2008 - 21:45 Uhr

Hallo stefan1979,

es gibt die Funktion PointToClient, die die Mauskoordinaten in die Koordianten des Clients, also dem Control, von welchem PointToClient aufgerufen wird, umrechnet.

07.02.2008 - 15:46 Uhr

Hallo jazzoid,

du könntest die Eigenschaft PropertySort des PropertyGrids auf "No Sort" oder "Alphabetical" stellen, dann werden keine Kategorien eingeblendet.

07.02.2008 - 14:10 Uhr

Habs gerade selbst rausbekommen.

Die Anzahl der Properties auf dem ersten PropertyTab bekommt man mit:


propertyGrid.PropertyTabs[0].GetProperties(propertyGrid.SelectedObject).Count

07.02.2008 - 12:52 Uhr

So, ich habe jetzt das PropertyGrid, so wie ich es wollte.

Ich habe aber noch eine Frage: Wie bekomme ich die Anzahl der angezeigten Properties raus? Ich brauche diese, damit ich die Größe des PropertyGrids so festlegen kann, damit genau alle sichtbar sind.

07.02.2008 - 10:18 Uhr

@jazzoid: Ich habe auf CodeProject gesucht und für das Problem 2. und 3. Problem etwas gefunden.

@herbivore: Die Klasse PropertyTabs stellt doch meines Wissens nach nur verschiedene Ansichten auf die Eigenschaften einer Klasse bereit. Ich weiß jetzt noch nicht genau, in wie weit mir das weiter hilft.

Ich werde mir jetzt erstmal das Projekt auf CodeProject anschauen.
Wahrscheinlich werden dabei meine Fragen schon beantwortet.

07.02.2008 - 09:52 Uhr

Hallo,

bei der Verwendung des PropertyGrid-Controls habe ich noch drei Probleme, die ich noch nicht hinbekommen habe:

  1. Wie kann ich zur Laufzeit bestimmen, welche Eigenschaften im PropertyGrid angezeigt werden sollen und welche nicht?

  2. Wie kann ich den Anzeigename einer Eigenschaft ändern? (Standardmäßig wird ja immer der Name der Property verwendet, ich möchte aber auch Leerzeichen verwenden)

  3. Kann man zur Laufzeit bestimmen, welche Eigenschaft ReadOnly sein soll?

Vielen Dank im, voraus für eure Antworten.

06.02.2008 - 08:06 Uhr

Hallo Björn,

benutze mal das FormClosingEvent. Dort bekommst du in den EvenArgs geliefiert, was der Grund für das Schließen ist (also, ob vom Benutzer, vom Betriebssystem usw.).

05.02.2008 - 18:40 Uhr

Hallo Lothi,

mach mal am Ende ein sw.Close() bzw. fsW.Close()

05.02.2008 - 15:13 Uhr

Das Problem ist gelöst.

Ich hatte noch mehrer Klassen von TreeNode abgeleitet und innerhalb meines nodeCopy war ein Knoten einer Klasse, die tatsächlich keinen parameterlosen Konstruktur besessen hatte.

05.02.2008 - 11:53 Uhr

Hallo herbivore,

ich habe in meiner abgeleiteten Klasse einen parameterlosen Konstruktor.


public MyTreeNode()
{
}

05.02.2008 - 10:17 Uhr

Achso, wenn ich zusätzliche Member einführe, so muss ich die Fkt. Clone() implementieren.

Kann mir jemand einen Tipp geben, wie eine solche Clone-Fkt. aussehen könnte?

05.02.2008 - 09:24 Uhr

Hallo talla,

Clone() ist ja in der Basisklasse System.Windows.Forms.TreeNode definiert.

in meiner abgeleiteten klasse habe ich daran nichts geändert.

Hier ist nochmal die komplette Exception:

System.MissingMethodException wurde nicht behandelt.
Message="Für dieses Objekt wurde kein parameterloser Konstruktor definiert."
Source="mscorlib"
StackTrace:
bei System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandle& ctor, Boolean& bNeedSecurityCheck)
bei System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean fillCache)
bei System.RuntimeType.CreateInstanceImpl(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean fillCache)
bei System.Activator.CreateInstance(Type type, Boolean nonPublic)
bei System.Windows.Forms.TreeNode.Clone()
bei System.Windows.Forms.TreeNode.Clone()
bei MappingEditor.MessageStructureIDOC.ReadIDoc(TreeNodeCollection nodecolParent, StreamReader sr, String strLine, String strEnd) in C:\Dokumente und Einstellungen\a.gey\Eigene Dateien\Visual Studio 2005\Projects\Workbench\Workbench\MessageStructureIDOC.cs:Zeile 480.
bei MappingEditor.MessageStructureIDOC.ReadIDoc(TreeNodeCollection nodecolParent, StreamReader sr, String strLine, String strEnd) in C:\Dokumente und Einstellungen\a.gey\Eigene Dateien\Visual Studio 2005\Projects\Workbench\Workbench\MessageStructureIDOC.cs:Zeile 460.
bei MappingEditor.MessageStructureIDOC.ReadNodes(String strLine, StreamReader sr) in C:\Dokumente und Einstellungen\a.gey\Eigene Dateien\Visual Studio 2005\Projects\Workbench\Workbench\MessageStructureIDOC.cs:Zeile 385.
bei MappingEditor.MessageStructureIDOC.Load() in C:\Dokumente und Einstellungen\a.gey\Eigene Dateien\Visual Studio 2005\Projects\Workbench\Workbench\MessageStructureIDOC.cs:Zeile 31.
bei MappingEditor.MyTreeView.LoadMessage() in C:\Dokumente und Einstellungen\a.gey\Eigene Dateien\Visual Studio 2005\Projects\Workbench\Workbench\MyTreeView.cs:Zeile 324.
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()

05.02.2008 - 09:14 Uhr

Hallo,

ich habe eine Klasse MyTreeNode, abgeleitet von TreeNode.

Wenn ich nun den unten stehenden Code ausführe, bekomme ich folgende Exception: System.MissingMethodException: Für dieses Objekt wurde kein parameterloser Konstruktor definiert.

Quellcode:


MyTreeNode node = (MyTreeNode)nodeCopy.Clone();

In der Klasse MyTreeNode ist aber ein parameterloser Konstruktor definiert:


public MyTreeNode()
{
}

Was mache ich falsch?

30.01.2008 - 16:41 Uhr

Danke Spontifixus, wieder was gelernt.

30.01.2008 - 15:32 Uhr

Achso, ich habe nur im Designer geschaut und dort habe ich nichts von Transparent gefunden.

30.01.2008 - 13:14 Uhr

OK, so könnte es funktionieren.

Wie bekomme ich aber ein Label transparent?

Außerdem schweifen wir etwas von meiner eigentlichen Fragestellung ab. 🙂

30.01.2008 - 12:44 Uhr

Da stimmt aber wenn ich jetzt zwei Buttons rechts ausrichten möchte ist es nichtmehr ganso einfach.

Ich habe es jetzt mal mit nem Panel probiert, allerdings, wenn ich eine PictureBox für das Icon verwende, so ist das Icon nicht transparent.

30.01.2008 - 12:07 Uhr

Hallo Spontifixus,

das StatusStrip hat halt den Vorteil, dass man sehr bequem weitere Buttons hinzufügen kann und diese links oder rechts im StatusStrip ausrichten kann.

30.01.2008 - 11:10 Uhr

Hallo,

ich verwende einen StatusStrip als eine Art Titelleiste für mein Control.
In diesem Statusstrips sind zwei Labels, das erste für eine Icon und das zweite soll einen Text darstellen.

Das Problem ist nun, dass wenn die Breite des StatusStrips nicht für beide Elemente ausreicht, wird das zweite Label mit dem Text komplett ausgeblendet. Ich möchte aber, dass wenigstens der Teil, der noch draufpasst angezeigt wird.

Wie kann man dieses Verhalten realisieren? In den Eigenschaften des StatusStrips und der Label habe ich nichts dazu gefunden.

Ich habe mir schon überlegt den Text für das zweite Label entsprechend zu kürzen. Aber da weiß ich grad nicht, wie ich die Position des zweiten Labels innerhalb des StatusStrip in Pixeln herausbekomme.

28.01.2008 - 12:50 Uhr

Hallo chriss_2oo4,

hast du Multiline auf true gesetzt?

28.01.2008 - 08:46 Uhr

Hallo,

in der Systemsteuerung kann ich für jeden Dienst angeben, was nach dessen unplanmäßigen Beendigung passieren soll (z.B. Rechner neu starten oä.).

Kann ich die Aktion auch mit der Klasse System.ServiceProcess.ServiceController einstellen? In der Doku habe ich nichts dazu gefunden.

Vielleicht geht es ja auch mit der sc.exe von Microsoft?

mfg

24.01.2008 - 16:54 Uhr

MouseEventHandler muss auch so heißen.

Du kannst dir einiges an Tipparbeit ersparen, wenn du folgendes machst:
Du tippst ein: "this.MouseMove+=" dann drückst du die Tab-Taste und die IDE ergänzt den Ausdruck.

24.01.2008 - 16:25 Uhr

Hallo Crusher,

hast du auch den EventHandler registriert?

Du musst im Konstruktor des Forms den EventHandler registrieren.
Ungefähr so:


this.MouseMove+=new MouseEventHandler(Form1_MouseMove);

24.01.2008 - 09:47 Uhr

In der klasse CultureInfo gibt es ein Property NumberFormat. Darin sind einige Kulturspezifische Zahleninformationen enthalten. Da müsstest du mal schauen, ob auch der 1000der Trenner dabei ist.

24.01.2008 - 09:08 Uhr

Hallo Froggie,

du könntest das Event TextChanged oader KeyDown abfangen und dann den Text in der TextBox entsprechend deinen Wünschen formatieren und anzeigen.

16.01.2008 - 21:47 Uhr

Hallo Bonvie,

der Pfad für Programme ist:


Environment.SpecialFolder.ProgramFiles

16.01.2008 - 12:26 Uhr

Das wäre eine Idee juetho.

Ich mache es jetzt aber anders. Wenn ich ToolTip.Show() aufrufe, dann setze ich eine Variable true, wenn ich ToolTip.Hide() aufrufe setze ich diese auf false.

Trotzdem vielen dank.

16.01.2008 - 10:35 Uhr

Hallo juetho,

die Eigenschaft Active habe ich auch gefunden,
allerdings legt diese nur fest, ob ToolTips aktiviert sind oder nicht.

Sie sagt nicht aus, ob gerade der ToolTip angezeigt wird oder nicht.

Doku:

Mit der Active-Eigenschaft können Sie das Anzeigen von QuickInfo-Text für alle Steuerelemente aktivieren oder deaktivieren, für die von dieser bestimmten ToolTip-Komponente Text angegeben wurde. Zwar können mehrere ToolTip-Komponenten erstellt und einem Formular zugeordnet werden, doch wirkt sich das Festlegen der Active-Eigenschaft auf false nur auf den aktuellen ToolTip aus. Sie können es Benutzern ermöglichen, den Wert dieser Eigenschaft in einem Formular festzulegen, dass Anwendungsoptionen bereitstellt. Diese Optionen geben dem Benutzer wiederum die Möglichkeit, die Anzeige von QuickInfos in der Anwendung zu aktivieren oder zu deaktivieren.

16.01.2008 - 08:39 Uhr

Hallo,

wie kann man feststellen, ob ein ToolTip gerade sichtbar ist oder nicht?
ToolTip.Visible gibt es leider nicht.

15.01.2008 - 10:33 Uhr

Hallo Danwe,

probiers mal mit SelectionBackColor.

15.01.2008 - 08:14 Uhr

Hallo herbivore,

ganz so einfach war es in meinem Fall dann doch nicht, da ich nur den KeyCode hatte und keine KeyEventArgs. Ich hätte also alle Keys durchprobieren müssen.
Okay, das wäre auch gegangen, aber der Threadersteller hatte die Frage ja auch gestellt und diese wurde noch nicht beantwortet.

mfg