Laden...
C
Christoph1968 myCSharp.de - Member
SMT-Applikationsingenieur Muenchen Dabei seit 20.08.2007 93 Beiträge
Benutzerbeschreibung
Bash C++ C#

Forenbeiträge von Christoph1968 Ingesamt 93 Beiträge

24.11.2021 - 19:46 Uhr

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

24.11.2021 - 14:07 Uhr

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

24.11.2021 - 11:21 Uhr

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

12.01.2019 - 18:45 Uhr

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

11.01.2019 - 22:21 Uhr

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

17.07.2018 - 16:44 Uhr

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

17.07.2018 - 15:14 Uhr

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.

17.07.2018 - 14:10 Uhr

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.

17.07.2018 - 13:49 Uhr

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

21.06.2012 - 16:36 Uhr

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

20.06.2012 - 15:59 Uhr

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

24.02.2012 - 20:59 Uhr

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

30.10.2011 - 09:31 Uhr

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

25.10.2011 - 13:13 Uhr

Vielen herzlichen Dank Euch allen.

Ihr seid ja schneller als die Polizei erlaubt.

Ganz liebe Grüße

Christoph

25.10.2011 - 13:01 Uhr

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

07.08.2011 - 11:57 Uhr

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

05.08.2011 - 21:13 Uhr

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

04.08.2011 - 14:28 Uhr

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

04.08.2011 - 09:30 Uhr

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

04.08.2011 - 08:32 Uhr

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

03.08.2011 - 17:20 Uhr

Hallo gfoidl,

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

Schoenen Abend und liebe Gruesse,

Christoph

03.08.2011 - 16:26 Uhr

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

22.07.2011 - 15:22 Uhr

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

22.07.2011 - 09:19 Uhr

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

21.07.2011 - 09:30 Uhr

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

20.07.2011 - 16:59 Uhr

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

20.07.2011 - 16:07 Uhr

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

18.07.2011 - 13:29 Uhr

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

18.07.2011 - 11:40 Uhr

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

13.03.2011 - 10:22 Uhr

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

10.03.2011 - 08:32 Uhr

Hallo Th69, hallo chilic,

vielen herzlichen Dank fuer Eure Antworten,

ich habe es mit der Deklaration als
XmlElement, XmlElementAttribute und XmlAttributeAttribute probiert,
das Resultalat ist leider immer gleich:
Das Property wird beim Serialisieren schlicht uebergangen.

Aber gut, das ist zwar nicht schoen und es wuerde mich schon interessieren,
was da schief laeuft, aber ich habe festgestellt, dass die erzeugte xml-Datei zumindest im Moment auch ohne ImportVersion vom betreffenden System weiterverarbeitet wird.

Viele Grüße und nochmals danke

Christoph

05.03.2011 - 11:39 Uhr

Hallo zusammen,

vielen Dank fuer Eure Antworten.

Die Funktion zum Serialisieren sieht wie folgt aus:

 private void exportPackagingUnitsToXml(FileInfo fileInfoTargetFile, PackagingUnitCollection packagingUnitCollection)
        {
            FileStream fileStream = new FileStream(fileInfoTargetFile.FullName, FileMode.Create);

            try
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(PackagingUnitCollection));

                xmlSerializer.Serialize(fileStream, packagingUnitCollection);

                fileStream.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("IncomingMaterialManager.exportPackagingUnitsToXml(FileInfo fileInfoTargetFile, PackagingUnitCollection packagingUnitCollection)" + ex.Message);
            }
            finally
            {
                fileStream.Close();
            }

        }//private void exportPackagingUnitsToXml(FileInfo fileInfoTargetFile, List<PackagingUnit> listPackagingUnits)

Es wird eine PackagingUnitCollection serialisiert.

28.02.2011 - 15:38 Uhr

verwendetes Datenbanksystem: xml

Hallo zusammen,

ich habe eine Klasse von System.Collections.ObjectModel.Collection abgeleitet
um sie zu serialisieren und als xml-Datei zu speichern.
Das klappt soweit auch wunderbar.
Nun habe ich in der abgeleiteten Klasse ein weiteres Property (string ImportVersion)definiert,
und dieses Property fehlt nun in meiner xml-Datei.
Es wird keine exception ausgeloest.

Hier ist die Definition meiner Klasse

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
using System.Xml.Serialization;

namespace SiplaceToolBox.IncomingMaterialManager
{
    [Serializable]
    [XmlType("PackagingList")]
    public class PackagingUnitCollection : Collection<PackagingUnit>
    {

#region Fields

        private string _importVersion;

#endregion Fields


#region Properties

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

#endregion Properties


#region Constructors

        public PackagingUnitCollection()
            : base()
        {
            _importVersion = "1.0.1.1";

        }//public PackagingUnitCollection()

#endregion Constructors

    }//public class PackagingUnitCollection : Collection<PackagingUnit> 

Ich bin ein bißchen ratlos, weil ich meine, soetwas prinzipiell schon oft gemacht zu haben.

Waere fuer einen Tip dankbar.

Viele Gruesse

Christoph

15.12.2010 - 08:22 Uhr

Hallo gnc,

das habe ich schon versucht, aber leider bekomme ich leider keine Antworten.

Grüße

Christoph

14.12.2010 - 17:13 Uhr

Hallo zusammen,

ich habe im Web die absolut vielversprechende Grafikbibliothek Drawing3d
gefunden und versuche nun dort meine ersten Schritte.
Im Web ist leider recht wenig darueber zu finden,
und die Doku ein wenig rudimentaer
Doku
und ich durchblicke das Event-Handling ueberhaupt nicht.

Das Tutorial geht auf diesen Punkt leider nicht ein,
und aus den Beispielen in der Doku kann ich mir zwar schon manches zusammenreimen,
aber die Beispiele aus der Doku kann ich leider nicht nachvollziehen,
Beispiel
irgendetwas fehlt oder mache ich falsch, denn sie funktionieren bei mir nicht
in der beschriebenen Art und Weise

Kennt jemand ein Beispielprojekt oder kann mir ein paar Codeschnipsel
zur Verfuegung stellen, wie man z.B. mit der Maus selektierbare und auch eindeutig
identifizierbare Objekte in die OpenGLDevice einfuegt.

Vielen Dank fuer Eure Hilfe

Gruesse

Christoph

30.08.2010 - 08:08 Uhr

verwendetes Datenbanksystem: MS Access 2000 / 2003

Hallo zusammen,

ich benutze die Microsoft DAO 3.6 Object Library um programmatisch eine Access-Datenbank zu erzeugen.

Klappt auch alles wunderbar, ich lege eine Access-Datenbank im Format DAO.DatabaseTypeEnum.dbVersion40 (Access 2000) an und entsprechende Tabellen.

Allerdings enthalten manche Tabellen Hyperlinks, die ich gerne in den Tabellen relativ zur HyperlinkBase der
Datenbank ablegen moechte.

Das macht erforderlich, auch das HyperlinkBase-Property der Datenbank entsprechend zu veraendern.
Manuell ist das kein Problem, aber wie mache ich das programmatisch ?

Ich habe bereits einen Tag lang gegoogelt und die vielen VB-Codeschnipsel die es zu diesem Thema gibt
zu adaptieren versucht.

Am meisten Kopfzerbrechen macht mir, dass in VB das HyperlinkBase-Property offensichtlich wie folgt zugaenglich ist:
Auszug aus dem VB-Post
Microsoft Access Help


...
If db.Containers(iDataBases).Documents(iSummaryInfo). Properties(x).Name = "Hyperlink base" Then
...

Wenn ich versuche, das mit folgendem Code nachzublilden,


 		database.Containers["Databases"].Documents["SummaryInfo"].CreateProperty("HyperlinkBase", DAO.DataTypeEnum.dbText, directoryInfoTargetBitmapFiles.FullName, true);
            	database.Containers["Databases"].Documents["SummaryInfo"].Properties.Append(propertyHyperlinkBase);

stelle ich fest, dass der Container["Databases"] meiner Datenbank nur ein (1!) Dokument mit Namen "MSysDb" enthaelt und ich keine zusaezlichen Dokumente anhaengen kann.

Hat jemand eine Idee, wie ich da weiterkommen koennte ?

Vielen Dank im Voraus!!

Christoph

16.08.2010 - 09:24 Uhr

verwendetes Datenbanksystem: MSAccess

Hallo zusammen,

ich verwende in meinem Projekt eine von DataTable abgeleitete Klasse.
Den Tabellenteil dieser Klasse wuerde ich nun gerne in einer MSAccess-Datenbankdatei speichern.

Ist es denkbar, nicht in eine bestehende Datenbankdatei abzuspeichern,
sondern die Datenbankdatei anzulegen und die benoetigten Tabellen und zugehoerigen Adapter aus jener von DataTable abgeleiteten Klasse zu generieren ?
So aehnlich wie man aus einer Server-Datenquelle einzelne Tabellen in ein
Dataset ziehen kann ?

Vielen Dank fuer Eure Bemuehungen.

Christoph

09.08.2010 - 10:30 Uhr

Hallo Zommi,

vielen Dank fuer Deine Hilfe. Sehr aufschlussreich.
Da habe ich ja schon einen Ansatzpunkt.
Ich werde versuchen, meinen Zeichenmassstab zu aendern
und das Problem auf diese Weise zu loesen.

Einen schoenen Tag noch.

Christoph

09.08.2010 - 09:36 Uhr

Hallo zusammen,

ich habe einen Path, mit dem ein sehr kleines RectangleF gezeichnet wurde.
Anschliessend wurde der Path mit Path.Transform(matrix) transformiert und
nach der Transformation besteht sein PointArray aus den 4 Punkten:

{X=-91.58201, Y=154.411}
{X=-91.58201, Y=153.811}
{X=-91.28201, Y=153.811}
{X=-91.28201, Y=154.411}

wenn ich nun _path.IsVisible(pointF) mit einem Punkt mit den folgenden
Koordinaten aufrufe

{X=-91.42139, Y=154.1108}

gibt die Funktion false zurueck.

Wenn man sich vorstellt, dass die vier Punkte des Path ein Rechteck aufspannen,
dann liegt der abgefragte Punkt definitiv innerhalb dieses (virtuellen) Rechtecks.
Daher wuerde ich erwarten, dass die Funktion Path.IsVisible() ein true zurueckgibt.

Bei groesseren Rechtecken funktioniert das, je kleiner die Objekte werden,
desto "unsicherer" wird diese Abfrage.

Es ist mir auch klar, dass ich das Problem in diesem Falle anderweitig loesen koennte, indem ich z.B. pruefe od die X- bzw. Y-Koordinate jeweils zwischen der kleinsten und der groessten X- bzw. Y- Koordinate liegt,
aber wenn der Fall mal komplizierter wird, wird auch dieser Ansatz schwierig.

Ist mein oben geschriebener gedanklicher Ansatz mit dem virtuellen Rechteck falsch ?
Und wenn ja, wie kann ich mir die Funktionsweise von Path.IsVisible(PointF)
vorstellen ?

Vielen Dank fuer Eure Bemuehungen.

Christoph

24.06.2010 - 17:06 Uhr

Hallo zusammen,

im TextChanged-Eventhandler einer RichTextBox,
rufe ich eine Art Syntax-Highlighter auf, der bestimmte Textstellen selektiert
und farbig hinterlegt.
Diese Markierungsaktionen wandern nun leider alle in den Undo-Stack,
in der ich eigentlich nur das gerne haette, was der Benutzer selbst manuell geaendert hat, also z.B. die Eingabe eines Zeichens, aber nicht die anschliessenden
Hervorhebungsaktionen.

Gibt es hierfuer eine Moeglichkeit, oder sollte ich die Funktionen Undo-Redo
selbst neu implementieren.

Vielen Dank fuer Euere Bemuehungen.

Grüße

Christoph

23.04.2010 - 10:27 Uhr

Hallo,

klappt super.

vielen Dank Euch beiden.

Grüße

Christoph

18.04.2010 - 10:43 Uhr

Hallo winSharp93,

vielen Dank fuer Deine Antwort.

Wie geht das mit der Substitution denn genau ?
Das wird im Betriebssystem gemacht, oder ?

Viele Grüße

Christoph

17.04.2010 - 19:31 Uhr

Hallo zusammen,

ich arbeite seit geraumer Zeit an einem Projekt, das sich im
Standard-Projektverzeichnis

C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\Projekt

befindet.

In die Tiefen der Verzeichnisse abgestiegen finde ich Pfadnamen bis ca. 130 Zeichen Laenge.

Nun tritt ploetzlich der folgende Fehler auf:

Fehler	1	Unerwarteter Fehler bei der GenerateApplicationManifest-Aufgabe.
System.IO.PathTooLongException: Der angegebene Pfad und/oder Dateiname ist zu lang. Der vollständig qualifizierte Dateiname muss kürzer als 260 Zeichen und der Pfadname kürzer als 248 Zeichen sein.
   bei System.IO.Path.SafeSetStackPointerValue(Char* buffer, Int32 index, Char value)
   bei System.IO.Path.NormalizePathFast(String path, Boolean fullCheck)
   bei System.IO.Path.NormalizePath(String path, Boolean fullCheck)
   bei System.IO.Path.GetFullPathInternal(String path)
   bei System.IO.Path.GetFullPath(String path)
   bei Microsoft.Build.Tasks.Deployment.ManifestUtilities.Manifest.ResolvePath(String path, String[] searchPaths)
   bei Microsoft.Build.Tasks.Deployment.ManifestUtilities.Manifest.ResolveAssembly(AssemblyReference a, String[] searchPaths)
   bei Microsoft.Build.Tasks.Deployment.ManifestUtilities.Manifest.ResolveFiles_1(String[] searchPaths)
   bei Microsoft.Build.Tasks.Deployment.ManifestUtilities.Manifest.ResolveFiles(String[] searchPaths)
   bei Microsoft.Build.Tasks.GenerateManifestBase.ResolveFiles()
   bei Microsoft.Build.Tasks.GenerateManifestBase.BuildManifest()
   bei Microsoft.Build.Tasks.GenerateManifestBase.Execute()
   bei Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean& taskClassWasFound)	SiplaceToolBox

Verschiebe ich das ganze Projekt nach z.B. C:, kann ich das Projekt wieder erstellen.

Ich kann nun aufgrund der Fehlermeldung nicht auf die Datei schliessen,
die den Fehler ausloest.

Wie komme ich da weiter?
Ich kann im gesamten Projekt keinen Pfad- oder Dateinamen mit auch nur annaehernd der in der Fehlermeldung genannten Laenge
finden.

Vielen Dank fuer Eure Muehen !

Viele Gruesse

Christoph

27.03.2010 - 10:58 Uhr

Hallo herbivore,
ErfinderDesRades,
jaensen,

vielen Dank fuer Eure ausfuehrlichen Beitraege.

(Ich hatte aufgrund der scheinbaren Trivialitaet schon befuerchtet, auf die Doku verwiesen zu werden)

Ich sehe dank Euerer Beitraege jetzt etwas klarer und habe mich fuer den ganz normalen Konstruktor entschieden, der im Falle eines fehlerhaften / unvollstaendigen Parameters eine Exception wirft.

Eine gangbare und vor allem uebliche Designrichtlinie.

Vielen Dank nochmals

Christoph

26.03.2010 - 19:38 Uhr

Hallo zusammen,

das Thema wurde zwar schon an verschiedenen Stellen diskutiert,
aber ich konnte noch keinen (klingt blöd) zufriedenstellenen Ansatz fuer mein Problem herausdestillieren:

Ich rufe den Konstruktor der Klasse ClassObject mit einer Instanz der Klasse ParameterObject als Parameter auf, um aus einigen Properties dieses Parameter-Objektes den Konstruktor zu bedienen.

Da die Daten des Parameter-Objektes aber aus Sicht des Konstruktors unvollstaendig/fehlerhaft sein koennten, wuerde ich das Parameter-Objekt gerne pruefen, bevor ich den Konstruktor selbst aufrufe.

Das ist mir prinzipiell plausibel, kein Problem. Die Frage ist nur, wie mache ich das am besten ?

Man kann natuerlich im Konstruktor pruefen und ggf. eine Exception werfen, aber das ist ja eigentlich schon ein bißchen spät, man ist ja schon dabei, das Objekt zu erzeugen / oder hat es schon zumindest teilweise erzeugt.

Wenn man vor jeder Stelle im Code, an der man ein Objekt ClassObject erzeugen will, die Werte des jeweiligen Parameter-Objektes
prüft, wird das wohl auch gehen, aber irgendwie wird das mit Anzahl der Stellen wo das passiert immmer häßlicher.

Man koennte auch das ParameterObject sich selbst pruefen lassen, ob es die Bedingungen fuer einen Aufruf des Konstruktors einer bestimmten Klasse erfuellt
(public bool hasValidData(), das geht ja mit Sicherheit auch, aber das ist dann irgendwie an der falschen Stelle.

Wie wäre denn dieser Ansatz:

Die Klasse ClassObject stellt eine public static ClassObject makeNewInstance(ParameterObject parameterObject)
zur Verfuegung, in der die erforderlichen Pruefungen stattfinden, die im Nicht-Fehlerfall den evtl. sogar privaten Konstruktor aufruft, das erzeugte Objekt zurueckgibt und im Fehlerfall eben nicht und anstelle dessen null zurueckgibt.

Einerseits gefaellt mir diese Idee, und ich wuerde einfach gerne wissen,
ob das von meiner Denke her total verquer ist,
oder ein durchaus akzeptabler Weg waere.

Viele Gruesse und vielen Dank

Christoph

13.03.2010 - 21:11 Uhr

Hallo FZelle,

klingt interessant, das kannte ich noch nicht,
vielen Dank Dir.

Grüße

Christoph

13.03.2010 - 17:15 Uhr

Hallo Herbivore,

das Setzen des ActiveControl hat es geloest.

Tausend Dank Dir.

Viele Gruesse,

Christoph

13.03.2010 - 17:07 Uhr

Hallo FZelle,

danke fuer Deinen Hinweis, es liegt mir auch fern, Dir zu widersprechen,
ich wuerde das nur gerne verstehen.

Ich benutze diese Spalte mit der CheckBox nur, um an dieser Stelle im Code
durch eine Benutzereingabe steuern zu lassen, ob das DataBoundItem eben dieser
Zeile importiert werden soll oder nicht.
Besagte Spalte repraesentiert damit eigentlich keine Eigenschaft dieser Klasse.

Mir kam die Vorgehensweise eigentlich recht schlau vor, weil ich ueber das DataBoundItem der Zeile direkt das Objekt der Begierde bekomme, und eine Auswahlmoeglichkeit habe eben ohne die Klasse erweitern zu muessen.

Ist das wirklich so krumm, was ich da gebastelt habe ?

Wuerdest Du in so einem Fall tatsaechlich die Klasse um einen Member "bool Import" erweitern ?

Viele Grüße

Christoph

12.03.2010 - 16:50 Uhr

Hallo zusammen,

ich habe ein Form, in dessen Flaeche ich zeichne (so aehnlich wie in Herbivore´s Anleitung beschrieben) Nun habe ich noch einen ToolStrip mit einer ComboBox.
Ich nutze das MouseWheel zum zoomen meiner Zeichnung.
Das geht genau so lange gut, bis ich das erste mal in die ComboBox clicke, um dort einen anderen Wert auszuwaehlen.
Ab diesem Zeitpunkt hat die ComboBox den Focus (nun ja, vielleicht nicht immer, aber zumindest empfaengt sie ab dann den MouseWheel-Event) und die Zoom-Funktion kann nicht mehr benutzt werden.
Wie bekomme ich es nun hin, dass das Form den MouseWheel-Event wieder bekommt ?

Vielen Dank im Voraus.

Grüße

Christoph