Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Christoph1968
Thema: ToolStripComboBox - Datenbindung
Am im Forum: GUI: Windows-Forms

Problem gelöst

Ich habe das falsche Property gebunden


toolStripComboBoxDisplayStyle.ComboBox.DataBindings.Add("SelectedItem", adminOrgUserSettingBindingSource, "AdminOrgUserSettingCalendarDisplayStyleTypeId", false, DataSourceUpdateMode.OnPropertyChanged);

Richtig ist


toolStripComboBoxDisplayStyle.ComboBox.DataBindings.Add("SelectedValue", adminOrgUserSettingBindingSource, "AdminOrgUserSettingCalendarDisplayStyleTypeId", false, DataSourceUpdateMode.OnPropertyChanged);

Wie so oft war der Fehler vor dem Bildschirm.

Viele Grüße

Christoph

Thema: Zuby.ADGV.Advanced.DatagridView: Exception
Am im Forum: GUI: Windows-Forms

Hallo Zegul,

ich kenne das Problem. Spalten vom Datentype byte[] lassen sich im AdvancedDataGridview wohl weder filtern noch sortieren, leuchtet mir auch irgendwie ein.

Ich habe das Problem dadurch gelöst, dass im im Load-Event der Form folgende Passage eingebaut habe:


foreach (DataGridViewColumn dataGridViewColumn in advancedDataGridView.Columns)
                {
                    advancedDataGridView.SetFilterAndSortEnabled(dataGridViewColumn, dataGridViewColumn.CellType != typeof(DataGridViewImageCell));
                }

Nicht schön, aber mit diesem Workaround bin ich über die Runden gekommen.
Vielleicht hilft Dir das.

Viele Grüße

Christoph

Thema: ToolStripComboBox - Datenbindung
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich versuche verzweifelt, eine ToolStripComboBox an eine BindingSource zu binden.


 toolStripComboBoxDisplayStyle.ComboBox.FormattingEnabled = true;
                toolStripComboBoxDisplayStyle.ComboBox.BindingContext = this.BindingContext;
                toolStripComboBoxDisplayStyle.ComboBox.DropDownStyle = ComboBoxStyle.DropDownList;
                toolStripComboBoxDisplayStyle.ComboBox.DataSource = adminOrgUserSettingCalendarDisplayStyleTypeDataTableBindingSource;
                toolStripComboBoxDisplayStyle.ComboBox.DisplayMember = "DisplayName";
                toolStripComboBoxDisplayStyle.ComboBox.ValueMember = "Id";
                toolStripComboBoxDisplayStyle.ComboBox.DataBindings.Add("SelectedItem", adminOrgUserSettingBindingSource, "AdminOrgUserSettingCalendarDisplayStyleTypeId", false, DataSourceUpdateMode.OnPropertyChanged);
                toolStripComboBoxDisplayStyle.ComboBox.BindingContext = this.BindingContext;

  adminOrgUserSettingCalendarDisplayStyleTypeDataTableBindingSource.Sort = "DisplayName ASC";
                adminOrgUserSettingCalendarDisplayStyleTypeDataTableBindingSource.DataSource = DataAccess.Instance.CoCGlobalAdminDataSet.AdminOrgUserSettingCalendarDisplayStyleType;

adminOrgUserSettingBindingSource.DataSource = ViewModel.ViewModel.Instance.AdminOrgUserSetting;

Die DataSource wird korrekt übernommen und die Inhalte der Spalte "DisplayName" der Tabelle wie gewünscht in der ComboBox angezeigt,
nur die Datenbindung, die ich versuche mit der folgenden Zeile hinzubekommen


                toolStripComboBoxDisplayStyle.ComboBox.DataBindings.Add("SelectedItem", adminOrgUserSettingBindingSource, "AdminOrgUserSettingCalendarDisplayStyleTypeId", false, DataSourceUpdateMode.OnPropertyChanged);

scheint ohne jeden Effekt zu bleiben. Es fliegt keine Exception, weder beim Binden noch später bei der Eingabe an der ComboBox, nichts was auf ein Problem hindeuten würde.

Die adminOrgUserSettingBindingSource bindet an ein POCO mit dem Property


...
        public Guid AdminOrgUserSettingCalendarDisplayStyleTypeId
        {
            get
            {
                return (_adminOrgUserSettingRow.AdminOrgUserSettingCalendarDisplayStyleTypeId);
            }
            set
            {
                if(_adminOrgUserSettingRow.AdminOrgUserSettingCalendarDisplayStyleTypeId != value)
                {
                    _adminOrgUserSettingRow.AdminOrgUserSettingCalendarDisplayStyleTypeId = value;
                    OnPropertyChanged();
                }
            }
        }
...


Hat jemand eine Idee, was ich da noch tun könnte? Ausnahmsweise wurde ich in Google zwar fündig, es gibt ein paar wenige Posts dazu, habe ich auch alles beherzigt,
konnte mein Problem aber leider nicht lösen.

Viele Grüße und vielen Dank für Eure Hilfe

Christoph

Thema: Verknüpfte Einträge in der Datenbank ebenfalls löschen: CascadeOnDelete funkt. nicht
Am im Forum: Datentechnologien

Hallo Abt, hallo MrSparkle,

vielen Dank für Eure Antworten.

Ich ziehe daraus den folgenden Schluß:

Prinzipiell steht das Konstrukt mit der abgeleiteten Basisklasse
nicht im Widerspruch zu CascadeOnDelete.

Ich habe nur ein paar Dinge falsch angepackt.

Ich werde nun versuchen, die von Euch vorgeschlagene Trennung
zwischen Modellierung und Daten umzusetzen.

Vielen Dank nochmals und viele Grüße

Christoph

Thema: Verknüpfte Einträge in der Datenbank ebenfalls löschen: CascadeOnDelete funkt. nicht
Am im Forum: Datentechnologien

Hallo Community,

es ist mir echt peinlich, aber ich kriege das folgende Problem,
ein simples CascadeOnDelete im EntityFramework (CodeFirst)
einfach nicht gelöst:

Diese abstrakte Basisklasse wird an alle relevanten Entities der Anwendung vererbt. Sie beinhaltet die ID jedes Objektes.
In der Datenbank erscheint damit in jeder Tabelle eine Id(PK,FK, uniqueidentifier, notNull) und in der Tabelle MetaData eine Zeile für jede
Entity, egal welcher abgeleiteter Klasse. MetaData speichert diverse Indikatoren, ob ein Objekt gerade editiert wird,
wann und von wem es zuletzt gepeichert wurde, usw. um die Zugriffsprobleme im MultiUser-Betrieb zumindest halbwegs in den Griff zu kriegen.

 
[Table("MetaData")]
[Serializable]
public abstract class MetaData : INotifyPropertyChanged
{
	[Key]
	public Guid Id { get; set; }
	....
}  

Das Scenario, um das es geht ist folgendes:


 
[Table("CompanySites")]
 [Serializable]
public class CompanySite : MetaData
 {
     ...
     private ObservableCollection<CompanySiteRoleType> _companySiteRoleTypes;
     public virtual ObservableCollection<CompanySiteRoleType> CompanySiteRoleTypes
	{
		get
		{
			return _companySiteRoleTypes;
		}
		set
		{
			if (_companySiteRoleTypes != value)
			{
				_companySiteRoleTypes = value;
				SetPropertyChanged();
			}
		}
	}
 ...  
 }//public class CompanySite : MetaData
 
 
[Table("CompanySiteRoleTypes")]
[Serializable]
public class CompanySiteRoleType : MetaData
{
	...
	public Guid CompanySiteId { get; set; }
    private CompanySite _companySite;
    [ForeignKey("CompanySiteId")]
    [Index("CompanySiteIdAndCompanyRoleType", 1)]
	public virtual CompanySite CompanySite
	{
		get
		{
			return _companySite;
		}
		set
		{
			if (_companySite != value)
			{
				_companySite = value;
				SetPropertyChanged();
			}
		}
	}
	...
}//public class CompanySiteRoleType : MetaData

Was ich will ist, dass wenn ein Objekt vom Typ CompanySite gelöscht wird, alle dieser Instanz über die ObservableBindingCollection
zugeordneten Objekte vom Typ CompanySiteRoleType ebenfalls gelöscht werden.

Wenn ich mich so umsehe, sollte dieses Verhalten wohl eigentlich sogar standardmäßig so sein.
Aber leider Fehlanzeige. Im SQL-Studio sehe ich den ForeignKey in den CompanySiteRoleTypes korrekt abgebildet, aber die DeleteRule ist immer "NoAction".

Auch wenn ich im modelBuilder folgende Zeile angebe, ändert dies leider nichts:



modelBuilder.Entity<CompanySite>().HasMany(i => i.CompanySiteRoleTypes).WithRequired(i => i.CompanySite).WillCascadeOnDelete(true);


Nun meine Frage: Kann es sein, dass die Basisfunktionalität "CascadeOnDelete" durch meine Konstruktion mit der abstakten Basisklasse "MetaData" ausgehebelt wird?

Ich weiß, dass man das alles alles auch "händisch" durch Iteration durch die Liste und manuelles Löschen der betroffenen Entities erreichen kann,
aber ich kann und will nicht glauben, dass es für dieses banale Problem, das vermutlich zigfach in jeder Datenbankanwendung erforderlich ist,
keine andere Lösung gibt.

Viele Grüße und vielen Dank Euch !!

Christoph

Thema: [Gelöst] Änderung einer weiteren Property eines Datengebundenen Objektes
Am im Forum: Datentechnologien

Hilf Dir selbst, dann hilft Dir Gott !

Ich habe nun ein BindingSource.EndEdit() für die BindingSource der Zeile
im BindingSource.CurrentChanged EventHandler für die ComboBox eingebaut.
Damit wird die durch die ComboBox initiierte Änderung an die betreffende Zeile
abgeschlossen und die nachfolgende Änderung der weiteren Property wird akzeptiert.

Trotzdem danke für Eure Hilfsbereitschaft.

Grüße

Christoph

Thema: [Gelöst] Änderung einer weiteren Property eines Datengebundenen Objektes
Am im Forum: Datentechnologien

Hallo Ihr Beiden,

also wenn der Abt und der Papst schon versuchen mir zu helfen,
dann muss das fast eine göttliche Fügung sein ;-)

Amen !

@Abt: Ich verwende ein DataSet, das über TableAdapter den Zugriff
auf die SQL-Datenbank abbildet.
Die Bindung erfolgt über BindingSources. Das Projekt ist sehr umfangreich
und im Prinzip funktioniert die Datenbindung hervorragend.
Nur greife ich an dieser Stelle wohl zum falschen Zeitpunkt auf ein Property
betreffenden Zeile zu.

Ich bin nun auf der Suche nach einem alternativen Trigger, um dieses Property setzen zu können, quasi nachdem die erste Änderung, die durch die ComboBox verursacht wurde, abgeschlossen ist.

Thema: [Gelöst] Änderung einer weiteren Property eines Datengebundenen Objektes
Am im Forum: Datentechnologien

Hallo Papst,

ja genau das versuche ich. Ich setze den Wert an den die Checkbox.Checked Property gebunden ist auf "true" oder "false".
Ich versuche nicht die Checkbox.Checked Property selbst auf True oder False zu setzen.

Thema: [Gelöst] Änderung einer weiteren Property eines Datengebundenen Objektes
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: MSSQL2012

Hallo zusammen,

ich habe eine Zeile einer Tabelle über eine Bindingsource an mehrere
controls innerhalb eines Dialoges (WinForm) gebunden.
Unter anderem ComboBoxen und CheckBoxen.

Ich möchte nun nach der Benutzerauswahl eines Wertes einer ComboBox
den Zustand einer der CheckBoxen je nach Wert auf "Checked" oder "Unchecked" setzen.

Mein Ansatz war nun, das im

ComboBox.ValueChanged-Event oder
ComboBox.IndexChanged-Event oder
BindingSource.CurrentChanged-Event

der ComboBox zu machen.

Wenn ich dort jedoch den Wert der in der Checkbox angezeigten Property
verändere, wird der Wert der betreffenden ComboBox wieder zurückgesetzt
und sie steht auf ihrem ursprünglichen Wert vor der Benutzeränderung.

Es ist so als ob der 2. Zugriff auf die Zeile die Änderungen des 1. Zugriffs
zurücksetzen würde. Ein Row.AcceptChanges() in den EventHandlers
brachte auch nichts.

Welchen Trigger kann ich sonst noch nutzen, um die entsprechenden Änderungen durchzuführen ?

Vielen Dank für jede Hilfe.

Grüße

Christoph

Thema: [erledigt] Aktuelle Zeile aus Tabelle in Status "Modified" nach BindingSource.BindingComplete
Am im Forum: Datentechnologien

Ich habe das jetzt so umgangen, dass ich den DataSourceUpdateMode auf "Never" gesetzt habe und die Aenderung
in der DataRow manuell nachpflege.

Ist nicht schoen, aber in diesem Fall ein gangbarer Weg.

Schoenen Tag noch

Christoph

Thema: [erledigt] Aktuelle Zeile aus Tabelle in Status "Modified" nach BindingSource.BindingComplete
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: SQL2008 dev

Hallo zusammen,

ich verwende einen DataSet - DataTableAdapter um auf eine SQL-Datenbank zuzugreifen.

Eine der relevaten Tabellen enthaelt eine Spalte mit Bildern (Typ byte[] ), die ich in einem entsprechenden Dialog an eine PictureBox binde, die string- und int-Felder sind an TextBox oder NumericUpDown
gebunden, das bindingSource.Current wird ueber eine ComboBox
oder programmatisch (im Falle "New") gesetzt.

Bevor nun der Dialog verlassen oder ein anderes Element bearbeitet
werden soll, moechte ich die Eigenschaft DataSetRow.RowState benutzen, um festzustellen, ob Veraenderungen vorgenommen wurden.

Nun stelle ich fest, dass die aktuelle Zeile grundsaetzlich unmittelbar nach dem bindingSource.CurrentChanged-Event den RowState "Modified" aufweist, wenn das Feld vom Typ "image" an die PictureBox gebunden ist und das Bild angezeigt wird. So als ob der RowState alleine durch die Bindung veraendert werden wuerde.

In diesem Falle tritt auch ein BindingSouce.BindingComplete-Event mit Context DataSourceUpdate auf. BindingMemberInfo.BindingField ist das entsprechende image-feld.

Wenn ich diese Bindung aufhebe und kein Bild angezeigt wird,
ist der RowState "Unchanged" solange ich keine Daten veraendere
und wird erst dann "Modified" wenn ein Wert in z.B. einer Textbox
geaendert wird, kurz: so wie ich es gerne haette.

Hat jemand eine Idee, wie ich es hinbekomme, dass die entsprechende Zeile nach dem bindingSource.CurrentChanged-Event den RowState "Unchanged" nicht verloren hat.

Vielen Dank im Voraus

Christoph

Thema: Wann kann ein Objekt, das nur für einen Schleifendurchlauf benötigt wird, freigegeben werden?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

wenn in einer Funktion wie z.B. dieser:


public void function(List<MyType> list)
{
    AnotherType anotherObject = null;

    foreach(MyType myObjectFromList in list)
   {
        anotherObject = new AnotherType(myObjectFromList);
        ........
    }
}
die Liste mit x Objekten durchlaufen wird, kann es sein, dass dafuer ein Speicherbedarf von x-mal der Groesse von AnotherType benoetigt wird, der nicht wieder freigegeben werden kann zumindest solange die Liste durchlaufen wird ?

Ich bin bisher davon ausgegangen, dass Speicher freigegeben werden kann, wenn keine Referenz mehr auf ihn verweist. Stimmt eher das ? Denn das waere ja nach jedem Durchlauf durch die Schleife der Fall.

Aber hier scheint es so zu sein, dass Speicher erst dann freigegeben werden kann, wenn die Referenz, die zu irgendeinem Zeitpunkt auf ihn verwiesen hat, aufgegeben wurde (Hier durch Verlassen des Blocks). Oder stimmt eher das ?

Vielen Dank im Voraus fuer Eure Antworten und einen schoenen Abend

Viele Gruesse

Christoph

Thema: [gelöst] Reflection.PropertyInfo - Summary-String eines Property auslesen ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo Herbivore,

vielen Dank fuer Deine Antwort.

Mit Reflection ist so vieles moeglich, das ist echt der Wahnsinn,
je mehr man darueber lernt, desto mehr Lichter gehen ploetzlich rund um einen herum an.

Für diesen Fall lasse ich es damit bewenden, die ApplicationName.xml einzulesen,
auch weil ich die betreffenden Klassen, die in Summe ca. 350 Properties haben, schon recht weit durchkommentiert habe.

Aber fuer einen anderen Knochen, an dem ich gerade herumkaue
koennte deine Info hilfreich sein.

Liebe Gruesse und ein schoenes Wochenende


Christoph

Thema: [gelöst] Reflection.PropertyInfo - Summary-String eines Property auslesen ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Vielen herzlichen Dank Euch allen.

Ihr seid ja schneller als die Polizei erlaubt.

Ganz liebe Grüße

Christoph

Thema: [gelöst] Reflection.PropertyInfo - Summary-String eines Property auslesen ?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hallo zusammen,

ich hole mir mit


Type myType = typeof(MyClass);

PropertyInfo[] propertyInfos = myType.getProperties();
die Properties eines Typen.

Nun habe ich fuer alle Properties einen beschreibenden Text als Summary
hinterlegt.

Ist es moeglich den Inhalt dieses Summary zu bekommen ?


///Summary
/// The reference-designator of a placement. Must be unique within a placement-list
public string Reference
{
    get{return _reference;}
}
Diesen Text "The reference-designator of a placement. Must be unique within a placement-list" wuerde ich gern zur Laufzeit irgendwie bekommen.
Moeglicherweise nicht ueber das PropertyInfo,
aber vielleicht auf einem anderen Weg ?

Viele Grüße

Christoph

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Hallo Floste,

nein, das bringt definitiv nichts. Ich kann mir die Ursache fuer dieses
Verhalten nur durch einen Fehler in der Bibliothek erklaeren.
Ich weiss nicht, was passiert denn, wenn z.B. diese Bibliothek nicht alle Resourcen
freigibt, bzw. wenn mehrere Kontexte erzeugt werden, wenn gerade die Funktion,
die den Text rendert nicht auf den neuen Kontext gesetzt wird.
Denn alles andere wird ja dargestellt, was auch immer es sein mag. Flaechen,
Koerper, Texturen, nur der Text fehlt.

Viele Gruesse

Christoph

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Hallo gfoidl,
hallo Floste,

ich habe nun doch einen Weg gefunden, mit dem ich in diesem Falle und nur
ganz leicht zaehneknirschend leben kann:

Wenn ich verhindere, daß das Form, das den OpenGL-Kontext innehat,
geschlossen wird sondern nur ausgeblendet wird,


DiagramViewer3d.hide();

dann kann ich im VisibleChanged-EventHandler


if(this.Visible)
{
    _openGlDevice.MakeCurrent();
}

aufrufen, was dann tatsaechlich dazu fuehrt, dass die gerenderten Texte nicht verschwinden.

Jedenfalls vielen lieben Dank fuer Eure Hilfe, ich waere da sonst vielleicht sehr viel spaeter oder gar nicht draufgekommen.

Ein schoenes Wochenende und viele Gruesse

Christoph

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Hallo Floste,

vielen Dank fuer Deine Antwort.
Ich habe Deinen Tip auch gleich getestet, aber das Verhalten ist unveraendert.
Das Problem ist, dass wenn das OpenGl-Fenster nach Start meiner Applikation zum wiederholten mal geoeffnet wird, wobei es keinen Unterschied zu machen scheint, ob es erzeugt oder nur ein- bzw. ausgeblendet wird, wird kein Text mehr dargestellt. Alles andere ist ja da und wird korrekt gerendert.

Mein Verdacht ist, dass die drawing3d.dll, die ich da einsetze,
nicht alle Resourcen freigibt, wenn die openGlDevice aufgegeben wird.

Aber moeglicherweise kann ich auf den RenderingContext zugreifen und das manuell machen, da muss ich mich aber erst reinarbeiten.
Die Bilder, die ich angehaengt habe, erfordern ca. 10 Zeilen Code incl. vollstaendiger Navigation, Skalierung und identifizierbaren Markern.
Das finde ich fantastisch !!! Deshalb will ich auch da noch nicht gleich aufgeben.

@gfoidl: Vielen Dank fuer Deinen Tip, ich seh mir das mal an, wenn ich da nicht weiterkomme.

Vielen Dank Euch beiden und liebe Grueße

Christoph

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Nochmal ein Bild, auf einem voellig anderen System und voellig anderem Programm (HelloWorld aus dem Tutorial leicht modifiziert)

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Hallo gfoidl,

ich habe jetzt folgende Aenderungen getestet:

Das Objekt _coordinateAxes habe ich entfernt.

Den Closing EventHandler habe ich durch die override OnClosing
ersetzt.

Die Funktion sieht derzeit so aus:


        protected override void OnClosing(CancelEventArgs e)
        {
            base.OnClosing(e);

            //DeRegister OnPaint-EventHandler
            _openGlDevice.OnPaint -= _openGlDevice_OnPaint;
            //Close the OpenGlDevice
            _openGlDevice.Close();
            _openGlDevice.Work.Dispose();
            _openGlDevice.Dispose();
            
        }//protected override void OnClosing(CancelEventArgs e)

Das hat leider nichts gebracht. Das Verhalten ist unveraendert.

Ich habe parallel dazu getestet, was passiert, wenn ich dieses Form
nicht modal (also DiagramViewer3d.ShowDialog()) einblende
sondern nicht-modal ( DiagramViewer3d.Show() ) und dann mehrere
Instanzen parallel erzeuge.
Der Screenshot3 zeigt das Ergebnis: Im ersten Fenster (links oben) ist
alles wie gewuenscht, in den anderen Fenstern fehlt eben der Text. Ansonsten funktioniert alles. (Navigation, Zoom)

Hast Du noch eine Idee, was das sein koennte ?
Ist da unter Umstaenden an dieser Library (die mir wirklich suuuupergut gefaellt,
ich denke, interaktive 3D-Grafik war noch nie so einfach) etwas faul ?
Leider bleiben meine Kontaktversuche ueber http://www.drawing3d.de erfolglos.

Wenn Du Dir jetzt ansiehst, was ich da anzeigen moechte, also diese Messwerte, die Linien, vielleicht noch ein paar Quader, es waere auch schoen,
wenn man fuer jeden Messwert einen Marker haette
um ueber diesen nach einem Click-Event feststellen zu koennen, welcher Messwert das war.
Das ist ja nicht wirklich anspruchsvoll, welchen Ansatz wuerdest Du waehlen.


Vielen Dank fuer Deine Hilfe


Christoph

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Hallo gfoidl,

vielen Dank fuer Deine Antwort,
werde das gleich morgen frueh umsetzen und berichten.

Schoenen Abend und liebe Gruesse,

Christoph

Thema: [erledigt] Tao-Framework: Unvollstaendige Darstellung bei mehrfacher Formerzeugung
Am im Forum: Grafik und Sound

Hallo zusammen,

ich verwende die drawing3d.dll basierend auf dem Tao-Framework,
um vor einem schwarzen Hintergrund eine Anzahl von Messwerten durch eine Hand voll Linien,
Kontrollpunkte und ein paar Texte auszugeben
und stosse nun auf folgendes Problem:
Beim ersten Generieren des Dialogs erscheint alles wie im ScreenShot1 dargestellt.

Beim zweiten und nachfolgenden Generieren des Dialogs erscheinen nur die Linien und die Kontrollpunkte, nicht aber die Texte.
Auch nimmt die Performance bei Transformationen stark ab.
Nach Neustart der Anwendung ist die Darstellung wieder (beim ersten mal) perfekt.

Zur Anzeige wird ein neues Dialogfenster erzeugt, dessen Konstruktor folgendermassen aussieht:


public DiagramViewer3d()
        {
            InitializeComponent();

            _listDiagramDataEntities = new List<DiagramDataEntity>();

            _openGlDevice = new Drawing3d.Devices.OpenGlDevice();
            _openGlDevice.WinControl = this;
            _openGlDevice.Ambient = Color.White;
            _openGlDevice.Navigate = NavigateKind.ZoomRotateTrans;
            _openGlDevice.NearClipping = 0.1;
            _openGlDevice.OnPaint += new EventHandler(_openGlDevice_OnPaint);
            _openGlDevice.ClearScreen(Color.Black);
            
            _coordinateAxes = new Drawing3d.Editors.CoordinateAxes();
            _coordinateAxes.Size = new Drawing3d.Math.xyz(25.0, 25.0, 5.0);
            
            _coordinateAxes.Dim3d = true;
            _coordinateAxes.TextHeight = 1.0;
            _coordinateAxes.Parent = _openGlDevice.Work;

            this.Load += new EventHandler(DiagramViewer3D_Load);

            this.FormClosing += new FormClosingEventHandler(DiagramViewer3d_FormClosing);

        }//public DiagramViewer3D()

Im FormClosing EventHandler passiert das:


	void DiagramViewer3d_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (e.CloseReason == CloseReason.UserClosing)
            {
                _openGlDevice.Close();
                _openGlDevice.Dispose();
            }
            
        }//void DiagramViewer3d_FormClosing(object sender, FormClosingEventArgs e)
Ich stehe da vor einem Raetsel und habe bereits folgendes probiert:

Den Dialog static deklarieren und nur einmal erzeugen anstelle eines neuen Dialogs den vorhandenen einfach ein- bzw. auszublenden -> keine Aenderung

Einsatz einer anderen Rechnerhardware mit anderer Grafikkarte -> keine Aenderung

Ohne FormClosing EventHandler -> keine Aenderung

Setzen von


_openGlDevice.WinControl = this; 
im Konstruktor oder im Load-EventHandler -> keine Aenderung

Hat jemand eine Idee, was ich da noch tun koennte ?

Vielen Dank fuer jeglichen Tip und liebe Gruesse


Christoph

Thema: [erledigt] Performance-Problem mit RichTextBox beim Syntax-Coloring (480000 Stellen)
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

also zu aller erst ganz vielen lieben Dank fuer Euer Engagement.
Kann ich nur sagen, Hut ab.

@herbivore: Ja, das mit der innersten Gruppe war auch mein erster Ansatz, aber die User kamen damit nicht zurecht und ich habe es nicht hinbekommen, das so zu kommunizieren, dass das funtioniert haette.
Dann habe ich das wie oben beschrieben modifiziert, womit die Leute dann zwar einerseits leichter zurechtkamen,
andererseits hat dies im Gegenzug die Performanceprobleme mit der RichTextBox manchmal ins Unertraegliche gesteigert. Mit ScintillaNET macht diese Anwendung einen rieeeeeeesigen Schritt nach vorne.
Und was RegexLab betrifft: Seit ich es kenne, gehoert es zu meinen Standard-Tools, und wenn ich mich recht erinnere war es Dein RegexLab, das mich in diesem Projekt zu diesem graphisch unterstuetzten Loesungsansatz animiert hat.

@Th69: Vielen Dank auch Dir. Solche Schoten schreibe ich öfter. Ich weiss eigentlich auch nicht, warum.Klar, das ist besser,
es nicht 3 x neu zu generieren.

Euch ein schoenes Wochenende & liebe Grueße

Christoph

Thema: [erledigt] Performance-Problem mit RichTextBox beim Syntax-Coloring (480000 Stellen)
Am im Forum: GUI: Windows-Forms

Hallo Coder 007,

vielen Dank fuer Deine Antwort.
Ich habe einen ScreenShot der Editorkomponente meines Programmes
angehaengt. Ich definiere einen mehr oder weniger komplexen regex,
der verschiedene benamte Gruppen enthaelt. Die Gruppennamen im Regex werden mit einer Farbe gekennzeichnet. Mit genau dieser Farbe werden dann auch die gefundenen Uebereinstimmungen in Scintilla hervorgehoben.
Bei geschachtelten Gruppen wird jede Uebereinstimmung buchstabenweise abwechselnd mit den Farben der geschachtelten Gruppen hervorgehoben.
Das braucht vermutlich am meisten Resourcen.

Fuer jede Hervorhebung wird eine Schleife Schleife durchlaufen
die folgende Funktion aufruft:

/// <summary>
        /// Highlights a selection of the text in the scintillaTextBox
        /// </summary>
        /// <param Name="startPosition">Start-position of the highlighting</param>
        /// <param Name="length">Length of the text to be highlighted</param>
        /// <param Name="textColor">Color of the text</param>
        /// <param Name="backColor">Color of the background</param>
        public void highlightText(int startPosition, int length, Color textColor, Color backColor)
        {
            try
            {
                if (!_dictionaryScintillaStyles.ContainsKey(backColor.Name + "-" + textColor.Name))
                {
                    _dictionaryScintillaStyles.Add(backColor.Name + "-" + textColor.Name, _dictionaryScintillaStyles.Count + 20);
                    _scintillaTextBox.Styles[_dictionaryScintillaStyles[backColor.Name + "-" + textColor.Name]].BackColor = backColor;
                    _scintillaTextBox.Styles[_dictionaryScintillaStyles[backColor.Name + "-" + textColor.Name]].ForeColor = textColor;
                }
               
                _scintillaTextBox.Styles[_dictionaryScintillaStyles[backColor.Name + "-" + textColor.Name]].Apply(startPosition, length);
            }
            catch
            {

            }

        }//public void highlightText(int startPosition, int length, Color textColor, Color backColor)

Wenn ich die Hervorhebung umgehe, indem ich sofort nach diesem Funktionsaufruf mit return beende, dauert der Rest der Schleife ca. 1.5 s.
Mit Hervorhebung dauert das ca. 5.5 s. Das heisst, das fuer die reine Hervorhebung ca. 4 s benoetigt werden.

Siehst Du da noch Potential ?

Viele Grüße

Christoph

Thema: [erledigt] Performance-Problem mit RichTextBox beim Syntax-Coloring (480000 Stellen)
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich habe die gleiche Funktionalitaet mit ScintillaNET implementiert.

Das ist genau das was ich brauche. Das Highlighting von ca. 600.000 Stellen
in einem Dokument mit ca. 10.000 Zeilen benoetigt ca. 5 s.

Und nebenbei kann man auch noch die Zeilennummern einblenden.
Ein total klasse Tool !!!

Vielen Dank fuer Eure Hilfe.

Liebe Grüße

Christoph

Thema: [erledigt] Performance-Problem mit RichTextBox beim Syntax-Coloring (480000 Stellen)
Am im Forum: GUI: Windows-Forms

Mensch,
Ihr seid ja auf Zack.

Tausend Dank fuer Eure Antworten, da kann ich gleich probieren.

Ich werde berichten.

Nochmals vielen Dank und liebe Grüsse

Christoph

Thema: [erledigt] Performance-Problem mit RichTextBox beim Syntax-Coloring (480000 Stellen)
Am im Forum: GUI: Windows-Forms

Hallo zusammen,

ich stelle u.U. sehr große Textdateien in einer RichTextBox dar.

Das klappt auch sehr gut, das Laden (Einlesen) einer bis zu 60.000 Zeilen umfassenden
Datei dauert weniger als 2 s.
Problematisch wird es nun, wenn ich z.B. bestimmte Textabschnitte (meist einzelne Woerter oder Daten davon) mit einer Hintergrundfarbe versehen will.
Das sind leicht 8 verschiedene Einfaerbungen pro Zeile, also das koennen
bis zu 480.000 Einfaerbungen sein.
Hintergrund: Der Text wird nach bestimmten Mustern durchsucht, die spaeter
als Datenfelder genutzt werden sollen. Durch die Einfaerbung kann man sofort sehen, welches Feld nun welche Bedeutung in einem spaeteren Datensatz bekommen wird. Der Effekt dieser Darstellung ist einfach (atom)bombastisch.

Der Wunde Punkt an dieser Sache ist, dass das Einfaerben der einzelnen Felder
wohl nicht sehr performant ist. Wenn ich das mit den normalen Funktionen der
RichTextBox mache, dauert das leicht eine Minute und teilweise noch viel laenger.
Ich rufe fuer jede Einfaerbung die folgende Funktion auf:


public void highlightText(int startPosition, int length, Color textColor, Color backColor)
                this._richTextBoxSourceFile.Select(startPosition, length);
                this._richTextBoxSourceFile.SelectionColor = textColor;
                this._richTextBoxSourceFile.SelectionBackColor = backColor;
                this._richTextBoxSourceFile.DeselectAll();

Hat jemand (im Gegensatz zu mir) eine Idee, wie man das anderweitig performanter bewerkstelligen koennte ?
Eine Zeitdauer von 10 s bei einer so grossen Datei waere absolut akzeptabel.

Oder bin ich da mit der richTextBox komplett auf dem Holzweg ?
Ich wuerde nur sehr ungerne auf o.g. Effekt verzichten wollen.

Vielen Dank & liebe Grüße

Christoph

Thema: [erledigt] Deserialisierung Formatproblem mit double-Wert
Am im Forum: Datentechnologien

Hallo gfoidl,

vielen Dank fuer Deine Antwort:

Ja, das habe ich eben gemacht und ich bin soeben draufgekommen,
dass meine Probleme woanders herruehren:

Man hat abgesehen vom Format der Gleitkommazahhlen auch die Gross/Kleinschreibung der Objektnamen veraendert.
Das hatte ich uebersehen.

Mit dem Format der Gleitkommazahhlen hatte das ganze auf jeden Fall nichts zu tun.

Viele Grüße

Christoph

Thema: [erledigt] Deserialisierung Formatproblem mit double-Wert
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: xml

Hallo zusammen,

ich habe ein bestehendes Programm, das ein komplexes Objekt durch Deserialisierung (XMLSerializer) einer XML-Datei erzugt.

Nun wurde die Ausgabe von float / double -Werten in diese XML-Datei dahingehend geaendert, dass float / double -Werte ohne Fliesskommawert
als Ziffer gefolgt von einem Punkt ausgegeben werden, siehe im Objekt "EstimatedPose" den Wert "Z":


  <EstimatedPose>
  <X>-12.00773594</X> 
  <Y>-233.722849</Y> 
  <Z>-4.</Z> 
  <Phi>-0.117837379</Phi> 
  <Nx>0.9999978851</Nx> 
  <Ny>-2.056648796e-003</Ny> 
  <Ox>2.056648796e-003</Ox> 
  <Oy>0.9999978851</Oy> 
  </EstimatedPose>
Ich habe aber nun den Verdacht, dass Objekte, die diese Notierung aufweisen nicht deserialisisert werden, im erzeugten Objekt ist EstimatedPose == null.

Dies ist nicht die einzige Formataenderung, die da stattgefunden hat,
so dass u.U. das Problem noch von anderer Seite herruehren kann,
aber kann das das an diesem Format (das ich zunaechst schon als legales Format zur Darstellung einer Fliesskommazahl empfunden haette) liegen ?

Vielen Dank & Gruesse

Christoph

Thema: Property fehlt in xml-Datei
Am im Forum: Datentechnologien

Hallo spike24,

auch wenn ich dem Property kein weiteres ControlAttribute verpasse,
wird es ignoriert.
Das war eigentlich auch mein allererster Ansatz,
so habe ich das bisher immer gemacht.

...
#region Properties

        public string ImportVersion
        {
            get { return _importVersion; }
            set { _importVersion = value; }
        }

#endregion Properties
...




Das mit OnSerialized und OnDeserialized sehe ich mir an,
kann das aber erst naechste Woche im Buero tun, melde mich dann.

Vielen Dank Dir und einen schoenen Sonntag

Christoph