Laden...

Forenbeiträge von Andreas@Tricept Ingesamt 289 Beiträge

01.04.2010 - 19:17 Uhr

Hallo,

ich habe gerade ein Problem mit DataBindings, was ich nicht gelöst kriege...

Ich habe auf einer Tabpage einige Usercontrols mit DataBindungs verbunden (im Konstruktor)
Wenn ich nun auf der Oberfläche auf die entsprechende TabPage klicke geht das Program abrupt aus, in der Console sehe ich nachfolgende Exception.

Wenn normalerweise eine Exception geworfen wird komme ich ja an den Teil wo das Problem besteht, hier habe ich leider keinerlei informationen was denn falsch läuft...

Könnt ihr mir einen Hinweis geben?

Hier die Exception:

System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>
>
</TraceIdentifier><Description>Unbehandelte Ausnahme</Description><AppDomain>MCockpit.vshost.exe</AppDomain><Exception><ExceptionType>System.NullReferenceException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.</Message><StackTrace> bei System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
bei System.Windows.Forms.Binding.SetPropValue(Object value)
bei System.Windows.Forms.Binding.PushData(Boolean force)
bei System.Windows.Forms.Binding.UpdateIsBinding()
bei System.Windows.Forms.Binding.CheckBinding()
bei System.Windows.Forms.Binding.SetListManager(BindingManagerBase bindingManagerBase)
bei System.Windows.Forms.ListManagerBindingsCollection.AddCore(Binding dataBinding)
bei System.Windows.Forms.BindingsCollection.Add(Binding binding)
bei System.Windows.Forms.BindingContext.UpdateBinding(BindingContext newBindingContext, Binding binding)
bei System.Windows.Forms.Control.UpdateBindings()
bei System.Windows.Forms.Control.OnBindingContextChanged(EventArgs e)
bei System.Windows.Forms.ContainerControl.OnCreateControl()
bei System.Windows.Forms.UserControl.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.SetVisibleCore(Boolean value)
bei System.Windows.Forms.TabPage.set_Visible(Boolean value)
bei System.Windows.Forms.TabControl.UpdateTabSelection(Boolean updateFocus)
bei System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs e)
bei System.Windows.Forms.TabControl.WmSelChange()
bei System.Windows.Forms.TabControl.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.Control.SendMessage(Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.Control.ReflectMessageInternal(IntPtr hWnd, Message&amp;amp; m)
bei System.Windows.Forms.Control.WmNotify(Message&amp;amp; m)
bei System.Windows.Forms.Control.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.NativeWindow.DefWndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.DefWndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.WmMouseDown(Message&amp;amp; m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.TabControl.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;amp; msg)
bei System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei MV2007.Program.Main(String[] args) in D:\Projekte\MCockpit\MCockpit 3.3\MV2007\Program.cs:Zeile 84.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()</StackTrace><ExceptionString>System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
bei System.Windows.Forms.Binding.SetPropValue(Object value)
bei System.Windows.Forms.Binding.PushData(Boolean force)
bei System.Windows.Forms.Binding.UpdateIsBinding()
bei System.Windows.Forms.Binding.CheckBinding()
bei System.Windows.Forms.Binding.SetListManager(BindingManagerBase bindingManagerBase)
bei System.Windows.Forms.ListManagerBindingsCollection.AddCore(Binding dataBinding)
bei System.Windows.Forms.BindingsCollection.Add(Binding binding)
bei System.Windows.Forms.BindingContext.UpdateBinding(BindingContext newBindingContext, Binding binding)
bei System.Windows.Forms.Control.UpdateBindings()
bei System.Windows.Forms.Control.OnBindingContextChanged(EventArgs e)
bei System.Windows.Forms.ContainerControl.OnCreateControl()
bei System.Windows.Forms.UserControl.OnCreateControl()
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
bei System.Windows.Forms.Control.CreateControl()
bei System.Windows.Forms.Control.SetVisibleCore(Boolean value)
bei System.Windows.Forms.TabPage.set_Visible(Boolean value)
bei System.Windows.Forms.TabControl.UpdateTabSelection(Boolean updateFocus)
bei System.Windows.Forms.TabControl.OnSelectedIndexChanged(EventArgs e)
bei System.Windows.Forms.TabControl.WmSelChange()
bei System.Windows.Forms.TabControl.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.SendMessage(HandleRef hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.Control.SendMessage(Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.Control.ReflectMessageInternal(IntPtr hWnd, Message&amp;amp; m)
bei System.Windows.Forms.Control.WmNotify(Message&amp;amp; m)
bei System.Windows.Forms.Control.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.CallWindowProc(IntPtr wndProc, IntPtr hWnd, Int32 msg, IntPtr wParam, IntPtr lParam)
bei System.Windows.Forms.NativeWindow.DefWndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.DefWndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.WmMouseDown(Message&amp;amp; m, MouseButtons button, Int32 clicks)
bei System.Windows.Forms.Control.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.TabControl.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp;amp; m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp;amp; m)
bei System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
bei System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG&amp;amp; msg)
bei System.Windows.Forms.Application.ComponentManager. System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop (Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
bei System.Windows.Forms.Application.Run(Form mainForm)
bei MV2007.Program.Main(String[] args) in D:\Projekte\MCockpit\MCockpit 3.3\MV2007\Program.cs:Zeile 84.
bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
bei System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
bei System.Threading.ThreadHelper.ThreadStart_Context(Object state)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
bei System.Threading.ThreadHelper.ThreadStart()</ExceptionString></Exception></TraceRecord>

14.12.2009 - 17:53 Uhr

Ich benuzte einen MSSQL Server.

Ok dann meine Überlegungen bisher:

Wenn ich zwei Fremdschlüssel einfüge...

[Kettenglied]

  • ID [PK]
  • Links [FK]
  • Rechts [FK]

Dann habe ich Redundanzen da der erste Eintrag auf die [5] zeigt und der [5] auf die [1], darüber hinaus können diese Felder falsch gesetzt sein und die Datenbank wäre inkonsistent.

Wenn ich nur einen FK benutze...

[Kettenglied]

  • ID [PK]
  • Rechts [FK]

Dann hat jedes Glied potenziell mehrere linke Glieder und somit ist das Design nicht richtig.

14.12.2009 - 17:39 Uhr

Hallo ich habe reine Modellierungsfrage.

Und zwar wie modelliere ich Ketten in einer Datenbank.

Ich habe folgenden Fall:
Folgende Entitäten (ausgedrückt durch einen Primärschlüssel) sollen kettenartig an einander hängen.

[1]-[5]-[6]-[9]

Dabei ist 1 der Anfang und kennt seinen rechten Kettenmitglied, 5 kennt den linken und den rechten. Alle Mitglieder dieser Kette dürfen in keiner anderen Kette enthalten sein und haben entweder keinen oder einen linken bzw. rechten Nachbar.

Lässt sich das überhaupt über ein Datenbank design abbilden oder muss ich die Konsistenz der Datenbank durch Programmierlogik gewährleisten?

Also Ausgangspunkt ist derzeit die Tabelle:

[Kettenglied]

  • ID [PK]

Alle meine Versuche hatten bisher eine Schwachstelle und ich möchte diese nicht ausführen, da ich euch nicht in eine bestimmte Richtung lenken möchte...

09.12.2009 - 16:49 Uhr

Den Fehler kann ich jedenfalls umgehen indem ich mein Objekt zunächst in Byte[] umwandel und dann Serialisiere...

Dies lässt sich auch wieder normal deserialisieren.

09.12.2009 - 16:09 Uhr

Ja ich bin dahinter gekommen. Ich verwende eine Enum die ich im Namespace verschoben habe. Er kann das alte Object noch deseralisieren, später beim serialisieren kracht es jedoch, weil anscheinend ein internes Holderobjekt Fehler bei der Deseralisierung gesammelt hat und dieses Holderobjekt kann nicht wieder serialisiert werden...

Habe ich irgendeine Möglichkeit alte Objekte mit der anderen Enum zu laden und mit dem neuen Enum zu speichern?

09.12.2009 - 14:10 Uhr

Hallo,

ich serialisiere eine TreeNode, das hat eigentlich auch gut funktioniert. Jetzt bekomme ich jedoch eine Exception:

Der Typ "System.Runtime.Serialization.TypeLoadExceptionHolder" in Assembly "mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" ist nicht als serialisierbar gekennzeichnet.

Ich habe meiner Meinung nach nichts geändert was Einfluss auf das Serialisieren haben könnte. Was ist das für ein Fehler? Warum will er mir denn eine Instanz vom Typ "TypeLoadExceptionHolder" serialisieren, natürlich habe ich keine solche Eigenschaft in meinem Serialisierungsobjekt deklariert....

02.12.2009 - 11:13 Uhr

Das Problem ist das in einem Framework die Basiselemente nicht immer allein Interfaces sind und ich mit bestimmten Frameworks auch Basisklassen verwenden muss.

Alleine mit Vererbung komme ich nicht zum Ziel, da ich eine Art Mehrfachvererbung durch Interfaces brauche.

Mein Interface soll den Zweck erfüllen in einem Framework relativ frei zu sein.
Daher ist es kein klar abgetrenntes Interface aber auch nicht so starr wie ein konkreter Typ von dem ich erben muss, würde also irgendwo dazwischenliegen.

Einen Designfehler ansich sehe nicht unbedingt, da ich kein klar abgetrenntes Interface haben darf, und auch nicht komplett auf diese verzichten kann aus oben genannten Gründen...

Oder kann man generell sagen das Wenn ein Interface nicht vollkommen losgelöst ist, es sich um jedenfall um einen Designfehler handelt?

02.12.2009 - 10:53 Uhr

Hallo ich habe eine generelle Designfrage.
Ich habe eine bestimmte Klasse erstellt. Für einige Subklassen möchte ich ein bestimmtes Interface verwenden, und die entsprechenden Objekte auch über dieses Interface ansprechen.

Kann ich jetzt meinem Interface sagen das es nur für eine bestimmten Basisklasse und alle davon vererbten Klassen verwendet werden darf?

Als Beispiel: Es gibt ja die Klasse Control. Das Interface IScrollAble macht nur an einem Objekt vom Typ Control Sinn. Der Rest soll auch ausgeschlossen werden.
Wenn ich mit einem Objekt vom Interfacetyp IScrollAble arbeite will ich die Sicherheit haben das es auch ein Control ist und Controleigenschaften nutzen.

Ich hoffe es war verständlich.

Gibt es ein Lösungsansatz für diese Problematik oder muss ich die Interface Objekte immer nach Typ abfragen und casten?

06.11.2009 - 21:12 Uhr

Vielen Dank Flo. Sehr Aufmerksam von dir.

06.11.2009 - 18:34 Uhr

Lösung:


       MemoryStream stream = new MemoryStream();
            mBinFormater = new BinaryFormatter();
            mBinFormater.Serialize(stream, mElement);
            return stream.ToArray();

Was mir noch nicht ganz klar ist. Ich habe nun ein byte[10000] (Quellcode) in ein Binary[4000] Feld in der DB gespeichert.
Wie groß darf denn maximal mein Byte array sein um an die Binary 4000 grenze zu kommen?

06.11.2009 - 17:22 Uhr

verwendetes Datenbanksystem: MSSQL 2005

Hallo,

in meiner Anwendung Gibt es zu verschiedenen Datenansichten unterschiedliche Konfigurationsmöglichkeiten. Alle eingestellten Konfigurationen speichere ich beim Programmende in eine Settings Datei des jeweils aktiven Benutzers.

Nun soll eine Funktion hinzukommen wo man seine Konfiguration allen anderen Benutzern veröffentlichen will...
Dafür muss ich die entsprechenden Konfigurationen in die DB speichern.
Ein richtiges DB-Modell für alle Konfigurationsstrukturen wäre zu aufwändig und macht wenig Sinn, daher muss ich die entsprechende Konfiguration am besten in ein Byte[] feld einer Datenbank speichern.

Wie mache ich das am besten. Kann ich einfach ein Objekt eine Bytefolge umwandeln und wieder zurück konvertieren?

Wie sollte ich dafür am besten die Spalte in MSSQL definieren?
wär ein Binary[4000] in Ordnung?

04.11.2009 - 10:17 Uhr

Hallo,

Ich benutze eine MSSQL Datenbank und habe folgendes Problem.
Ich habe eine Entität, welcher beliebig viele Eigenschaften zugewiesen werden können.

Also als Beispiel unsere Entität ist Mensch, dieser hat eine grüne Augenfarbe, eine gebräunte Hautfarbe und Studiert und arbeitet. Also als Menge an Eigenschaften haben wir nun beispielsweise:
Augenfarbe: Grün, Braun, Blau
Hautfarbe: Schwarz, Braun, Weiss, Bleich
Berufsstatus: Student, Schüler, Arbeitnehmer

Eine Entität kann von einer Kategorie mehrere Ausprägungen haben.

Ziel ist es gleichartige Entitäten zu erkennen. Gleichartigkeit bedeutet, dass die Entität eine gleiche Eigenschaftenkombination hat wie ein anderes.

Bei 10 unterschiedlichen Eigenschaften wären das 2^10 Möglichkeiten.
Ich wollte zunächst diese Kombination als Bitzahl in der Datenbanktabelle der Entität speichern.

Leider stoße ich bei vielen Eigenschaften in Speicherprobleme, da ich ja maximal bei einer 64 bit Zahl maximal 64 unterschiedliche Eigenschaften haben darf.

In meiner Anwendung werden jedoch produktiv etwa 500 unterschiedliche Eigenschaften verwendet, die Anzahl ist auch nicht begrenzt, sondern variablel.
Man könnte sich jedoch mit Sicherheit auf eine fixe Zahl über 500 einigen.

Nun kann ich keine 500 bit Zahl in die DB Speichern. Und bei ein paar Hunderttausend oder ein paar Millionen Entitätseinträgen kann ich auch nicht die Gleichartigkeit jeder einzelnen Entität im Bedarfsfall ermitteln, da ich sonst an massive Performenceprobleme stoße...

Habt ihr vielleicht eine Idee wie ich eine Lösung dafür schmieden könnte?
Mein Ansatz ist ja nicht ganz ausgereift.

Die DBTabellen dafür sehen übrigens so aus:

Tabelle Entität -> Wichtig nur der Primärschlüssel (E-ID)

Tabelle Ausprägung -> 3 Fremdschlüssel (E-ID,TYP_ID, VZ_ID)

Tabelle Verzeichnis -> Ersten beiden Spalten sind Primärschlüssel (TYP_ID, VZ_ID NAME)

TYP_ID steht für die Eigenschaftenkategorie, beispielsweise Augenfarbe
VZ_ID ist die jeweilige Ausprägung, beispielsweise braun

23.10.2009 - 15:26 Uhr

Hier der Designercode, fals jemand den Code ausführen möchte.

namespace WindowsFormsApplication3
{
    partial class frmStern
    {
        /// <summary>
        /// Erforderliche Designervariable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Verwendete Ressourcen bereinigen.
        /// </summary>
        /// <param name="disposing">True, wenn verwaltete Ressourcen gelöscht werden sollen; andernfalls False.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Vom Windows Form-Designer generierter Code

        /// <summary>
        /// Erforderliche Methode für die Designerunterstützung.
        /// Der Inhalt der Methode darf nicht mit dem Code-Editor geändert werden.
        /// </summary>
        private void InitializeComponent()
        {
            this.btnStartDrehung = new System.Windows.Forms.Button();
            this.tbGeschwindigkeit = new System.Windows.Forms.TrackBar();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.tbAnzahlZacken = new System.Windows.Forms.TrackBar();
            this.tbGroesse = new System.Windows.Forms.TrackBar();
            this.label3 = new System.Windows.Forms.Label();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            ((System.ComponentModel.ISupportInitialize)(this.tbGeschwindigkeit)).BeginInit();
            this.groupBox1.SuspendLayout();
            ((System.ComponentModel.ISupportInitialize)(this.tbAnzahlZacken)).BeginInit();
            ((System.ComponentModel.ISupportInitialize)(this.tbGroesse)).BeginInit();
            this.SuspendLayout();
            // 
            // btnStartDrehung
            // 
            this.btnStartDrehung.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
            this.btnStartDrehung.Location = new System.Drawing.Point(2, 391);
            this.btnStartDrehung.Name = "btnStartDrehung";
            this.btnStartDrehung.Size = new System.Drawing.Size(75, 23);
            this.btnStartDrehung.TabIndex = 0;
            this.btnStartDrehung.Text = "Start";
            this.btnStartDrehung.UseVisualStyleBackColor = true;
            this.btnStartDrehung.Click += new System.EventHandler(this.btnStartDrehung_Click);
            // 
            // tbGeschwindigkeit
            // 
            this.tbGeschwindigkeit.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.tbGeschwindigkeit.AutoSize = false;
            this.tbGeschwindigkeit.Location = new System.Drawing.Point(97, 16);
            this.tbGeschwindigkeit.Minimum = 1;
            this.tbGeschwindigkeit.Name = "tbGeschwindigkeit";
            this.tbGeschwindigkeit.Size = new System.Drawing.Size(357, 25);
            this.tbGeschwindigkeit.TabIndex = 1;
            this.tbGeschwindigkeit.TickStyle = System.Windows.Forms.TickStyle.None;
            this.tbGeschwindigkeit.Value = 1;
            this.tbGeschwindigkeit.Scroll += new System.EventHandler(this.tbGeschwindigkeit_Scroll);
            // 
            // groupBox1
            // 
            this.groupBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.groupBox1.Controls.Add(this.tbAnzahlZacken);
            this.groupBox1.Controls.Add(this.tbGroesse);
            this.groupBox1.Controls.Add(this.label3);
            this.groupBox1.Controls.Add(this.tbGeschwindigkeit);
            this.groupBox1.Controls.Add(this.label1);
            this.groupBox1.Controls.Add(this.label2);
            this.groupBox1.Location = new System.Drawing.Point(83, 391);
            this.groupBox1.Name = "groupBox1";
            this.groupBox1.Size = new System.Drawing.Size(460, 108);
            this.groupBox1.TabIndex = 2;
            this.groupBox1.TabStop = false;
            this.groupBox1.Text = "Werteinstellung";
            // 
            // tbAnzahlZacken
            // 
            this.tbAnzahlZacken.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.tbAnzahlZacken.AutoSize = false;
            this.tbAnzahlZacken.Location = new System.Drawing.Point(97, 78);
            this.tbAnzahlZacken.Maximum = 500;
            this.tbAnzahlZacken.Minimum = 1;
            this.tbAnzahlZacken.Name = "tbAnzahlZacken";
            this.tbAnzahlZacken.Size = new System.Drawing.Size(357, 25);
            this.tbAnzahlZacken.TabIndex = 7;
            this.tbAnzahlZacken.TickStyle = System.Windows.Forms.TickStyle.None;
            this.tbAnzahlZacken.Value = 5;
            this.tbAnzahlZacken.Scroll += new System.EventHandler(this.tbAnzahlZacken_Scroll);
            // 
            // tbGroesse
            // 
            this.tbGroesse.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
                        | System.Windows.Forms.AnchorStyles.Right)));
            this.tbGroesse.AutoSize = false;
            this.tbGroesse.Location = new System.Drawing.Point(97, 47);
            this.tbGroesse.Maximum = 500;
            this.tbGroesse.Minimum = 50;
            this.tbGroesse.Name = "tbGroesse";
            this.tbGroesse.Size = new System.Drawing.Size(357, 25);
            this.tbGroesse.TabIndex = 6;
            this.tbGroesse.TickStyle = System.Windows.Forms.TickStyle.None;
            this.tbGroesse.Value = 200;
            this.tbGroesse.Scroll += new System.EventHandler(this.tbGroesse_Scroll);
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(6, 82);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(44, 13);
            this.label3.TabIndex = 5;
            this.label3.Text = "Zacken";
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(6, 23);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(85, 13);
            this.label1.TabIndex = 3;
            this.label1.Text = "Geschwindigkeit";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(6, 54);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(36, 13);
            this.label2.TabIndex = 4;
            this.label2.Text = "Größe";
            // 
            // frmStern
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(555, 508);
            this.Controls.Add(this.groupBox1);
            this.Controls.Add(this.btnStartDrehung);
            this.Name = "frmStern";
            this.Text = "Sterndrehung";
            ((System.ComponentModel.ISupportInitialize)(this.tbGeschwindigkeit)).EndInit();
            this.groupBox1.ResumeLayout(false);
            this.groupBox1.PerformLayout();
            ((System.ComponentModel.ISupportInitialize)(this.tbAnzahlZacken)).EndInit();
            ((System.ComponentModel.ISupportInitialize)(this.tbGroesse)).EndInit();
            this.ResumeLayout(false);

        }

        #endregion

        private System.Windows.Forms.Button btnStartDrehung;
        private System.Windows.Forms.TrackBar tbGeschwindigkeit;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.TrackBar tbAnzahlZacken;
        private System.Windows.Forms.TrackBar tbGroesse;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
    }
}


23.10.2009 - 15:24 Uhr

Hallo,
ich habe eine Form porgrammiert um einen Stern zu zeichen und rotieren zu lassen. Ich habe auch die DoubleBuffered Property auf true gesetzt dennoch flackert das Bild beim Onpaint, wenn ich beispielsweise mit der Maus über mein "iDrawAngle" gehe....

Kann mir jemand helfen?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace WindowsFormsApplication3
{
    public partial class frmStern : Form
    {
        float iAktuellerDrehungsWinkel;
        float iGeschwindigkeit;
        bool iGestartet;
        Timer iTimer;
        int iRadius;
        int iZacken;
        RectangleF iDrawAngle;
        Point iOffset;
        bool iOverAngle;

        public frmStern()
        {
            InitializeComponent();
            SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
            iTimer = new Timer();
            iTimer.Interval = 50;
            iTimer.Tick += new EventHandler(iTimer_Tick);

            DoubleBuffered = true;
            iRadius = tbGroesse.Value;
            iZacken = tbAnzahlZacken.Value;
            CalcGeschwindigkeit();
            iOffset = new Point(40,40);
        }

        void iTimer_Tick(object sender, EventArgs e)
        {
            iAktuellerDrehungsWinkel += iGeschwindigkeit;
            if (iAktuellerDrehungsWinkel >= 360)
                iAktuellerDrehungsWinkel = 0;
            Invalidate();

        }

        protected override void OnPaint(PaintEventArgs e)
        {
            base.OnPaint(e);
   
            //Berrechnung der Zackenwinkel
            float grad = 360;
            grad /= iZacken * 2;

            //Zackentiefe (entspricht dem Goldenen Schnitt!)
            double abstand = (Math.PI / 2);
      
            //Erstellung der Matrix
            //Nach Zuweisung von m ist m != e.Graphics.Transform! (Da Matrix ein Struct ist)
            Matrix m = e.Graphics.Transform;

            //Drehung der Matrix
            m.RotateAt(iAktuellerDrehungsWinkel, new PointF(iRadius + iOffset.X, iRadius + iOffset.Y));
            
            //Punkteliste wird fürs spätere Zeichnen benötigt
            List<PointF> points = new List<PointF>();

            //Durchlauf über alle äußeren und inneren Zackenpunkte
            for (int i = 0; i < iZacken*2; i++)
            {
                PointF p = PointF.Empty;

                //Wenn i gerade ist wird der Punkt am äußerem Zackenende bestimmt, sonst am inneren.
                if (i % 2 == 0)
                {
                    p = new Point(iRadius + iOffset.X, iOffset.Y);
                }
                else
                {
                    p = new PointF((float)iRadius + iOffset.X, (float)(iRadius / abstand) + iOffset.Y);
                }

                //Der aktuell berrechnete Punkt p muss nun anhand der entsprechenden Drehung transformiert werden
                //Das Array wird gebraucht, da die Transform Methode ein Array erwartet
                PointF[] ps = new PointF[] { p };
                m.TransformPoints(ps);

                //Jeder transformierte Punkt wird in die Zeichenliste addiert
                points.Add(ps[0]);

                //Matrix wird gedreht
                m.RotateAt(grad, new PointF(iRadius + iOffset.X,iRadius + iOffset.Y));
            }
            //Der Erste Punkt muss doppelt vorkommen um den Anfang mit dem Ende zu verbinden
            PointF firstPoint = points[0];
            points.Add(firstPoint);

            iDrawAngle = new RectangleF(firstPoint.X - 10, firstPoint.Y - 10, 20, 20);

            //Der Stern wird gezeichnet
            e.Graphics.DrawLines(Pens.Black, points.ToArray());
            e.Graphics.FillEllipse(iOverAngle ? Brushes.Yellow : Brushes.White, iDrawAngle);
            e.Graphics.DrawEllipse(Pens.Black, iDrawAngle);


        }

        protected override void OnMouseMove(MouseEventArgs e)
        {
            base.OnMouseMove(e);
            if(iOverAngle != iDrawAngle.Contains(e.Location))
            {
                iOverAngle = !iOverAngle; 
                Invalidate();
            }
        }

        private void btnStartDrehung_Click(object sender, EventArgs e)
        {
            if (iGestartet)
            {
                btnStartDrehung.Text = "Start";
                iGestartet = false;
                iTimer.Stop();
            }
            else
            {
                btnStartDrehung.Text = "Stop";
                iGestartet = true;
                iTimer.Start();
            }
        }

        private void tbGeschwindigkeit_Scroll(object sender, EventArgs e)
        {
            CalcGeschwindigkeit();
        }

        private void tbGroesse_Scroll(object sender, EventArgs e)
        {
            iRadius = tbGroesse.Value;
            Invalidate();
        }

        private void tbAnzahlZacken_Scroll(object sender, EventArgs e)
        {
            iZacken = tbAnzahlZacken.Value;
            CalcGeschwindigkeit();
            Invalidate();
        }

        public void CalcGeschwindigkeit()
        {
            //Die Geschwindigkeit wird durch den Drehungsgrad bestimmt, da dieser
            //abhängig von der Anzahl an Zacken anders sein muss, wird er hier berrechnet.
            //Beispiel ein Stern mit 5 Zacken würde bei einer Drehung von 36° den größten Visuallen 
            //Sprung machen, daher ist alles darüber nicht sinnvoll, verfälscht vielleicht sogar den Eindruck.
            float g = 359 / (iZacken * 2);
            iGeschwindigkeit = g/20 * tbGeschwindigkeit.Value;
        }
    }
}

24.07.2009 - 11:46 Uhr

Hallo,

in VS2008 gibt es ja unter Extras->Optionen->Debugging
den Eintrag
"Durchlaufen des .NET Framework.Quellcodes aktivieren"

Diesen hatte ich angehackt um etwas bestimmtes zu prüfen.
Er hat mir die Quelldaten geladen und nun kann ich beim Debugging auch das .Net Framework durchlaufen.

Nun wollte ich diese Funktionalittät wieder deaktivieren. So naiv wie ich bin, gehe ich also wieder in die Optionen und hacke diese Checkbox wieder aus und denke es funktioniert wieder wie vorher. Leider nicht.

Ich durchlaufe immernoch das .Net Framework und weiss leider nicht wie ich das abstellen kann. Muss ich irgendwie die Quelldateien wieder entladen?

03.07.2009 - 09:23 Uhr

Das ist ein Teamprojekt, und bei anderen verhält sich dieses korrekt.
Erstelle ich bei mir ein neues lokales Projekt wird mir die geworfene Exception auch korrekt angezeigt.

Wird eine VS2008 Neuinstallation eventuell was bringen?

03.07.2009 - 08:31 Uhr

Mit strg + F5 kommt auch keine Meldung. Anwendung wird einfach geschlossen.

(Exception wird von meinem Code nicht abgefangen)

02.07.2009 - 18:04 Uhr

Habe die gleichen Probleme nur das die Anwendung (Also die WinForm) geschlossen wird.

02.07.2009 - 16:02 Uhr

passiert bei allen Exceptions.

Ich habe in den Punkt unter Debugging -> Exceptions -> "Unbehandelte Exceptions" alle angehackt, diese Änderung zeigt aber keine Wirkung.

Wenn alle ausgelösten Exceptions markiere hält er bei jedem thow auch korrekt an. Der Haltepunkt in dem Fall ist aber grün anstatt Gelb und es gibt kein Popup und ich kann fortfahren.

Da will ich aber eigentlich garnicht halten...

02.07.2009 - 14:17 Uhr

Extras -> Optionen -> Debugging -> Ausnahmen-Assistenten aktivieren [x] -> Aufrufliste für unbehandelte Ausnahmen entladen [ ] <- kein Haken!

02.07.2009 - 14:12 Uhr

Mir fehlt in dem Fenster die Spalte "Vom Benutzercode Unbehandelt" wie bekomme ich die wieder hin?

02.07.2009 - 13:41 Uhr

Wenn ich in VS08 in DEBUG-Modus über eine Exception gehen möchte schließt er mir die Anwendung anstatt anzuhalten und das gewohnte Popup anzuzeigen.

Liegt das vielleicht an einer Einstellung. Was könnte der Grund dafür sein?

01.07.2009 - 19:57 Uhr

Ein Fremdtool wäre eine Alternative. Ist dieser Sisusizer zu empfehlen?
Oder habt ihr eine andere Empfehlung?

01.07.2009 - 19:07 Uhr

Hallo,

ich möchte ein aktives Projekt Lokalisieren. Dafür dachte ich mir baue ich ein allgemeingültiges Lokalisierungstool. Das Konzept möchte ich mal vorstellen.

Anforderungen:

  • Vorhandene C# Projekte sollen die Fähigkeit bekommen Mehrsprachig zu sein
  • Die Einstellung der Sprachbezeichnungen muss in einem Standard-Tool für einen
    nicht-Programmierer bedienbar sein.
  • Das Tool muss erkennen was neu internationalisiert werden soll und muss dies dem
    Lokalisierer melden.
  • Nach der Lokalisierung muss das Ergebnis leicht in das neue Projekt (Ohne neu-kompilierung) eingebunden werden können.

Lösungsansatz:
Ein Lokalisierungstool kann C# Projekte laden. Es abstrahiert (C# Parser) dabei alle Strings der Anwendung und stellt diese in der Projektstruktur dar (Namespace-Struktur / Projektstruktur).
Einzelne Positionen können umbenannt, in eine eigendefinierte Struktur verschoben oder aber auch gelöscht(ausgeblendet) werden. Unrelevante Strings werden vorab ausgeblendet (Texte ohne Buchstaben), können aber auch wieder eingeblendet werden.

Dadurch wird eine XML – Struktur (DataSet) erzeugt LocStruktur.xml. Diese XML wird dem Lokalisierer weitergegeben.
Dieser liest diese XML Struktur mit dem Tool ein und kann im Tool dann die zu lokalisierenden Sprachen eingestellen.

Klickt er auf einen String-Knotenpunkt so hat dieser einen nicht bearbeitbaren Standardwert (Entwicklertext). Und weitere Textboxen für die jeweiligen anderen Sprachen in die übersetzt werden soll.
Ist der Lokalisierungsvorgang abgeschlossen kann er einfach einen Export ausführen, erhält eine Loc.xml und schiebt diese in das Programmverzeichnis des jeweiligen Programms. Und das Programm liest die Texte nun aus der XML.

Der Programmierer muss aber vorher noch das Projekt an die LocStruktur.xml binden. Es wird also jeder aktive (nicht ausgeblendete String) in einen Befehl umgewandelt und in die jeweilige *.cs Datei gespeichert.
So wird beispielsweise aus myButton.Text = „Übernehmen“ -> myButton = NetLoc.GetString(„Übernehmen“,199).
Wobei NetLoc die DLL ist welche dem Projekt hinzugefügt wurde. Der erste Parameter ist der Defaultwert, der zweite die eindeutige ID für diesen String. Die NetLoc Klasse holt nun aus dem jeweilig eingestellten Pfad und der eingestellten Sprache jeweils die übersetzten Texte aus der Loc.xml, findet diese keinen, wird der Default Wert zurückgegeben.

Wenn der Programmierer nun weiterentwickelt und neue Strings einfügt und ein Update im Lokalisierungstool startet, erkennt dieses die neuen Strings, entfernt alte und dem Lokalisierer muss dann die neue LocStruktur übergeben werden damit er auch die neuen Texte auch lokalisieren kann.

Soweit zum Konzept, was haltet ihr davon?

29.06.2009 - 17:03 Uhr

kann man generell sagen das er keine Default werte setzten soll?
Es nervt jedesmal seine Eigenschaften mit dem DesignerSerializationVisibility Flag zu markieren.

29.06.2009 - 15:29 Uhr

Ist Teil meines Frameworks. Ich habe bestimmte Containerklassen die mit Controls verbunden sind die Optionseinstellungen ermöglichen.
Durch den generischen Ansatz werden diese Optionselemente automatisch erstellt und verwaltet und zusätzlich kann ich im Quellcode typisiert darauf zugreifen.

29.06.2009 - 14:52 Uhr

Hallo. Ich arbeite mit dem Windows Forms Designer von VS2008 und habe ein Problem.
Wenn ich beispielsweise eine generische Form<T> habe und von dieser erbe, wird mir die geerbte Klasse nicht im Designer dargestellt. Wenn ich von dieser jedoch wieder erbe, klappt alles normal.


class Form1<T> : Form{}     //Wird im Designer dargestellt
class Form2 : Form<Type>{}   //Wird im Designer nicht dargestellt !!
class Form3 : Form2    //Wird im Designer dargestellt

Kann ich diesen Bug irgendwie umgehen? gibt es einen Hotfix von Microsoft dafür?

19.06.2009 - 13:05 Uhr

Hier der Gesamte Code der ComboBox mit Multiselect:

    public class ComboBoxMultiSelect : ComboBox
    {
        public bool MultiSelect { get; set; }
        int _checkWidth = 20;

        public object[] SlectedItems
        {
            get
            {
                RefreshCheckedArray();
                List<object> result = new List<object>();
                for (int i = 0; i < iChecked.Length; i++)
                {
                    if (iChecked[i])
                        result.Add(Items[i]);
                }
                return result.ToArray();
            }
        }
        public void SetChecked(int pIndex, bool pChecked)
        {
            RefreshCheckedArray();
            iChecked[pIndex] = pChecked;
        }

        bool[] iChecked = new bool[0];

        Dictionary<object, Color> iFontColors;

        public ComboBoxMultiSelect()
        {
            DrawMode = DrawMode.OwnerDrawVariable;
            iFontColors = new Dictionary<object, Color>();
            DropDownStyle = ComboBoxStyle.DropDownList;
            //this.OnCausesValidationChanged
 
        }

        protected override void OnCausesValidationChanged(EventArgs e)
        {
            base.OnCausesValidationChanged(e);
        }
        protected override void SetItemCore(int index, object value)
        {
            base.SetItemCore(index, value);
        }

        protected void RefreshCheckedArray()
        {
            bool[] temp = new bool[Items.Count];
            for (int i = 0; i < temp.Length; i++)
            {
                if (iChecked.Length > i)
                    temp[i] = iChecked[i];
                else
                    temp[i] = false;
            }
            iChecked = temp;
        }

     

        bool dropDown;
        protected override void OnDropDown(EventArgs e)
        {
            base.OnDropDown(e);
            RefreshCheckedArray();
            dropDown = true;
        }

        protected override void OnDropDownClosed(EventArgs e)
        {
            base.OnDropDownClosed(e);
            dropDown = false;
        }

        internal Rectangle GetParentBounds()
        {
            if (Parent == null)
                return Rectangle.Empty;
            int headerbreite = SystemInformation.ToolWindowCaptionHeight;
            Rectangle result = new Rectangle(Parent.Bounds.X + SystemInformation.FrameBorderSize.Width, Parent.Bounds.Y + headerbreite - SystemInformation.FrameBorderSize.Height, Parent.Width, Parent.Height);
            Control p = Parent.Parent;
            while (p != null)
            {
                result = new Rectangle(result.X + p.Bounds.X, result.Y + p.Bounds.Y, result.Width, result.Height);
                p = p.Parent;
            }
            return result;
        }

        protected override void OnKeyDown(KeyEventArgs e)
        {
            if (e.KeyValue == 40 || e.KeyValue == 38)
                e.Handled = true;
            base.OnKeyDown(e);

        }

        

        private string GetText()
        {
            string text = "";
            for (int i = 0; i < iChecked.Length; i++)
            {
                if (iChecked[i])
                {
                    if (!string.IsNullOrEmpty(text))
                        text += " | ";
                    text += GetText(Items[i]);
                }
            }
            return text;
        }

        protected override void DefWndProc(ref Message m)
        {
            if (dropDown && m.Msg == 0x111)
            {
                Point p = Cursor.Position;
                int h = p.Y - (Bounds.Y + GetParentBounds().Y + Height + 19);
                int y = 0;
                for (int i = 0; i < Items.Count; i++)
                {
                    y += GetItemHeight(i);
                    if (h < y)
                    {
                        iChecked[i] = !iChecked[i];
                        RefreshItems();
                        break;
                    }
                }
                return;
            }
            base.DefWndProc(ref m);
        }

        protected override void OnDrawItem(DrawItemEventArgs e)
        {
            base.OnDrawItem(e);
            if (e.Index < 0 || e.Index >= Items.Count)
                return;
            e.DrawBackground();
            if ((e.State & DrawItemState.Focus) != 0)
                e.DrawFocusRectangle();

            Brush b = null;
            object item = Items[e.Index];
            try
            {
                Color color = SystemColors.ControlText;
                Color colorOperation = SystemColors.Highlight;

                if ((e.State & DrawItemState.Focus) == DrawItemState.Focus)
                {
                    color = SystemColors.HighlightText;
                    colorOperation = SystemColors.HighlightText;
                }
                b = new SolidBrush(color);
                if(iFontColors.ContainsKey(item))
                    b = new SolidBrush(colorOperation);
                Rectangle textRect = e.Bounds;
                if (MultiSelect)
                {
                    if ((e.State & DrawItemState.ComboBoxEdit) == DrawItemState.ComboBoxEdit)
                    {
                        string text = GetText();
                        e.Graphics.DrawString(text, e.Font, b, e.Bounds);
                    }
                    else
                    {
                        ControlPaint.DrawCheckBox(e.Graphics, new Rectangle(textRect.X, textRect.Y, _checkWidth, textRect.Height), iChecked[e.Index] ? ButtonState.Checked : ButtonState.Normal);
                        textRect.Offset(_checkWidth, 0);
                        e.Graphics.DrawString(GetText(item), e.Font, b, textRect);
                    }
                }else
                    e.Graphics.DrawString(GetText(item), e.Font, b, textRect);
            }
            finally
            {
                if (b != null)
                    b.Dispose();
                b = null;
            }
        }

        private string GetText(object item)
        {
            if (item is DataRow && ((DataRow)item).Table != null && ((DataRow)item).Table.Columns.Contains(DisplayMember) && !((DataRow)item).IsNull(DisplayMember))
                return ((DataRow)item)[DisplayMember].ToString();
            else
                return item.ToString();
        }


    }
19.06.2009 - 10:37 Uhr

Habe eine Lösung gefunden:


    protected override void DefWndProc(ref Message m)
        {
            if (dropDown && m.Msg == 0x111)
                return;
            base.DefWndProc(ref m);
        }
19.06.2009 - 08:46 Uhr

Aber anscheinend gibt es keine Möglichkeit diesen MouseClick Event abzufangen.
Selbst in der ComboBox Klasse selber habe ich nichts gefunden was wegen einem MouseClick die DropDown schließt.

Wobei ich Tasten schon abfangen kann (Esc, Return..).

Naja schade, muss ich mir also doch was anderes überlegen 😕.

@ TmikeB: Bei CodeProjekt.com findest du ganz viele.

18.06.2009 - 15:41 Uhr

Mit der Suchfunktion habe ich kein Thema dazu gefunden.

Ich habe ein Problem gefunden wo die Box beim Click nicht geöffnet werden soll.
Aber nach dieser Methode, auf meinen Fall angewandt mit BeginInvoke + DroppedDown = true geht die ComboBox zu und dann wieder auf.
Und das sieht alles andere als schön aus.

18.06.2009 - 13:24 Uhr

Hallo,

ich brauche eine Combobox mit Multiselect-Fähigkeit. Natürlich gibt es genug frei entwickelte Lösungen dafür, bisher habe ich nur kein für mich ansprechendes gefunden, daher will ich das Steuerelement selber programmieren.

Ich scheitere jedoch an einer Kleinigkeit. Wenn ich in der Liste ein Element anklicke, schließt sich ja die ComboBox, kann ich dieses Verhalten beim Klicken unterbinden?

09.06.2009 - 14:01 Uhr

Aber kleines_eichhoernchen bist ein Schatz. Das Event AppDomain.CurrentDomain.UnhandledException wird gefeuert, d.h. mein eigener Fehlerdialog poppt auf und ich hab dadurch einen Ansatz.

Hat dieses Event irgendwelche Nachteile gegenüber dem Application.ThreadException ??

09.06.2009 - 13:24 Uhr

kleines_eichhoernchen das geht am Thema vorbei. Und natürlich kriegt der Benutzer keine Exception als Nachricht, aber ich benutze den Try Catch Block um überhaupt einen Fehler festzustellen, die weiterverarbeitung scheitert weil nicht der catch Teil ausgeführt wird sondern eine Windows-Meldung kommt.

09.06.2009 - 12:13 Uhr

Erfahrungsgemäß sind das Exceptions die auf Dateien zugreifen die Zugriffsgeschützt sind oder auf Netzlaufwerken liegen sollen aber nicht mehr existieren.

Diese Zugriffe habe ich zwar mit einem Try-Catch Block umrahmt, jedoch kommt die Windows Meldung hoch.

09.06.2009 - 11:56 Uhr

Application.ThreadException benutze ich, er springt jedoch nicht in dieses Event rein.

Jedoch habe ich die Application.SetUnhandledExceptionMode() noch nicht benutzt. Wenn ich diese auf UnhandledExceptionMode.CatchException setzt könnte es den Fehler schon beheben und wie beabsichtigt dann auch immer eine Exception werfen?

09.06.2009 - 11:16 Uhr

Ich bekomme in meiner Anwendung bei einigen Kunden eine Windows-Meldung das mein Programm nicht mehr funktioniert und beendet werden soll.

Nun weiss ich nicht genau woran das Programm scheitert.

Gibt es eine Möglichkeit das Programm mit einem Überwachungsmodus zu starten der im Prinzip mir einen Stacktrace aufbaut und bei einem solchen Absturz auch den Stacktrtace zurückgibt?

Also ich werfe auch mit Sicherheit eine Exception die zu dieser nichts sagenden Windows Meldung führt, aber wie komme ich an detalierte Informationen?

Hat jemand eine Ahnung oder soll ich im Code in bestimmten Klassen einfach reinschreiben das Sie in eine txt Datei ihren Aufruf anhängen?

03.06.2009 - 09:15 Uhr

Hallo Cummunity.

Ich arbeite seit längerem mit dem VS2008 und einem TFS2008 und die Situation erfordert nun das ich paralell verschiedene Versionen meiner Software pflege.

Ich wollte mal in den Raum fragen wie ihr das in euren Projekten macht und wie eure Erfahrungen diesbezüglich zum TFS2008 sind.

Ich möchte eine Hauptentwicklungslienie haben und von dieser manchmal eine feste Version abzweigen.
In diesen Abzweigungen werde ich dann einige Bugs fixen, welche auf die Hauplinie und allen folgeversionen übertragen werden soll.

Wie gehe ich da am besten vor? Wie macht ihr das?

15.05.2009 - 20:25 Uhr

Kunde behauptet ein anderes Programm läuft reibungslos.

15.05.2009 - 16:45 Uhr

MSSQL 2008 Cluster

Hallo,

in meiner Anwendung baue ich eine Verbindung zu einem MSSQL 2008 Cluster auf.
Dabei kommt es manchmal zu Verbindungsabbrüchen.

Leider ist das ganze beim Kunden und ich kann das Problem schwer nachvollziehen.
Aber laut seiner Aussage:

Anhand eines Netzwerktraces konnte er feststellen, dass eine Verbindung zum Datenbankserver aufgebaut wird. Die Verbindung verläuft normal, lediglich wenn der Client ein Zwischenpaket, das vom Sniffer als „TCP Checksum incorrect“ klassifiziert wird, erhält, baut der Client die Verbindung ab. Der SQL Server sendet noch die Daten über die Datenbankverbindung, aber der Client hat zu diesem Zeitpunkt bereits ein FIN ACK Paket gesendet. Dies wird dann vom SQL Server bestätigt.

Ich bin nun kein DB Experte und stehe etwas auf dem Schlauch, kann mir eventuell jemand helfen?

15.05.2009 - 11:10 Uhr

Ich hab jetzt nen sehr guten Mathparser gefunden der auch kaum wünsche offen lässt.
Performencetechnisch ist das Teil ein Goldstück.

Hier die Seite http://www.bestcode.com/html/bcparser_net.html

14.05.2009 - 11:54 Uhr

Ne Scriptsprache wäre vielleicht etwas zu viel.

Ich habe mal die ersten Treffer für Mathparser von www.codeproject.com und www.codeplex.com getestet.

Mein Testsieger ist:
http://www.codeproject.com/KB/cs/MathParserLibrary.aspx

Hat leider nicht alle Funktionalitäten (Grundfunktionen fehlen) ist aber relativ fix.

Achtung bei diesem Mathparser:
http://www.codeproject.com/KB/cs/MathParser.aspx

Dieser bietet zwar viele Funktionen, ist aber 30 mal so langsam. Das geht definitiv besser.

Viele Parser hatten Grundlegende Probleme (Einer konnte nicht mit Dezimalzahlen rechnen) und da der schnelle Testsieger nicht wesentlich schneller ist als mein eigener (etwa 20% schneller), ich jedoch mehr Funktionen haben will (Beispielsweise Parameter und Mathematische Grundfunktionen), bin ich auch mit meinem besser bediehnt.

Außerdem wenn ich bei meinem die Parsezeit weglasse und nur die reine Kalkulation betrachte, also mit Parametern arbeite. Überhole ich den anderen Parser auch leicht von der Performence. Ist geeignet wenn die gleiche Funktion nur mit anderen Parametern öfter ausgeführt werden soll.

14.05.2009 - 09:54 Uhr

Vielen dank. Und einen Lob von mir für diese Hilfe.

14.05.2009 - 09:39 Uhr

Hallo,

ich arbeite in meinem Projekt gerade an variabel zu definierbaren Tabellen.
Diese Tabellen können Spalten beinhalten die bestimmte Rechnungen durchführen oder ein Ergebnis prüfen (Wie Zellenoperationen in Excel).

Ich muss können:

Basis

  • Eine einfache Rechnung aufzulösen : "1+3*2" = 7
  • Kapselung soll möglich sein: "(1+3)*2" = 8

Nice to Have

  • Prüfungen: "3+3>5" = true

Für diese Anforderung implementiere ich gerade eine Klasse die mir den String in sinnvolle Tokens teilt (Lexer) und anschließend interpretiere ich die Tokens und parse die mir so zusammen das ich diese Kalkulation öffter verwenden kann.
(Kapselungsstruktur, Parametermöglichkeit, Methodenaufrufe)

Meine Frage an dieser Stelle ist. Gibt es vielleicht auch schon DLLs oder Codebeispiele für eine Berrechnung? Weil diese Berrechnung später eventuelle sehr oft ausgeführt werden sollen halte ich eine eigene Implementierung für eventuell zu langsam oder hätte gerne Vergleiche.

Als eine DLL die meine Basisanforderung erfüllt wäre schon super.

Ansonsten kann ich euch später ja meinen Code zur Verfügung stellen.

12.05.2009 - 13:43 Uhr

Hallo,

ich benutze den Serienbrief in Microsoft Word und verbinde Mein Word-Dokument mit einer Excel Tabelle. Ich erstelle mehrere solcher Serienbriefe.
Wenn ich jedoch die Methode "MailMerge.OpenDataSource" aufrufe öffnet sich das jeweilige Excel, spreche ich zum Worddokument ein Quit kommt leider ein Dialogfenster ob ich das Excel auch speichern möchte.

Da nun in einer Schleife mehrere Seriendrucke automatisiert erstellt werden muss man für jedendurchlauf das Excel speichern.

Ich habe überhaupt Probleme dieses Excel zu greifen, dann könnte ich es ja selbst schließen, weil über MailMerge.DataSource.Close kommt auch die Abfrage.

Mein Code:


                wrdDoc.MailMerge.OpenDataSource(...);
                wrdDoc.MailMerge.DataSource.Close();
                wrdApp.Quit(...);

04.05.2009 - 13:59 Uhr

Hallo,

wisst ihr ob es zu den Office Web Components (OWC11) von Office 2003 einen Nachfolger entsprechend zu Office 2007 gibt?

Ich würde gern, sollten diese Verfügbar sein, die neuen Charts von Office 2007 nutzen.
Habe leider noch keine Antwort auf diese Frage gefunden.

28.04.2009 - 16:45 Uhr

Vielen Dank das Statement funktioniert.

28.04.2009 - 16:05 Uhr

Verwendetes System MSSQL 2005.

Ist es legitim hier auch Fragen zu allgemeinem SQL zu stellen?
Wenn ja, meine Frage:

Ich habe einen SQL Befehl der wie folgt aussieht:

SELECT * FROM TABELLE WHERE MONTH(DATUM) = @MAX AND YEAR(DATUM) = 2009

In das @MAX möchte ich nun das Ergebnis deses Commands stecken

SELECT MAX(MONTH(DATUM)) FROM TABELLE WHERE YEAR(DATUM) = 2009

Kann ich dieses beiden Statements miteinadner verknüpfen oder müsste ich das im Programm tun? Will ungern zwei Requests an die DB schicken.

Also sinnbildlich so.
SELECT * FROM TABELLE WHERE MONTH(DATUM) = (SELECT * FROM TABELLE WHERE MONTH(DATUM) = @MAX AND YEAR(DATUM) = 2009) AND YEAR(DATUM) = 2009

Dieses Statement klappt natürlich nicht 😭

17.04.2009 - 09:56 Uhr

Hallo,

ich habe mal ein Bild angehängt um das Problem besser schildern zu können.

Ich habe Tabellencontrols (Eigene Klassen von Control abgeleitet) diese werden auf eine Leinwand gelegt und mit Schnittstellen miteinander verbunden. Die Schnittstellen zeichnet die Leinwand, verbindet also die Tabellenelemente miteinander.

Meine Tabellencontrols haben nun einen Schatten und unterstützen Transparenz.
Im Kreis 1 sieht man das die Transparenz greift und die Schnittstellen der Leinwand korrekt vom Schatten dargestellt werden.

Schiebe ich jedoch ein Tabellencontrol über ein anderes sehe ich das die Transparenz in dem Fall nicht greift?

Wisst ihr was zu tun ist?

19.03.2009 - 11:17 Uhr

In der Componente selber habe ich keine Probleme, wenn ich diese Jedoch in einer anderen Klasse Verwende kommt in der Fehlerliste ein "UNKNOWN ERROR" an der Stelle wo ich dieses Element benutze. Wenn ich <ContentControl> komplett auskommentiere bekomme ich keinen Fehler mehr...