Laden...

Forenbeiträge von flobow Ingesamt 53 Beiträge

19.06.2008 - 13:55 Uhr

Dann hab ich das Standartverhalten wohl von der ListViewBox mit dem des DataGridViews verwechselt.

18.06.2008 - 16:04 Uhr

Ja wenn ein DataGridView Fokusiert ist und man Bspw. "B" auf der Tastatur drückt dann Springt er zum ersten Datensatz der mit B beginnt , wenn man noch mal "B" drückt dann zum nächsten.

Dies Funktioniert bei mir aber nicht.

18.06.2008 - 15:35 Uhr

Hallo,

ich habe Folgendes Problem , ich habe ein DataGridView welches Datengebunden ist. Mit den Feldern Name,Partner-ID,Projekt-ID.

Das erste was Komisch ist das immer nach Partner-ID sortiert wird, obwohl Name die First Row ist.

DAs zweite und größere Problem ist, das wenn ich ein Buchstabe auf dem Keyboard drücke, normalerweise die Selektierung auf den nächsten Datensatz mit dem Buchstaben geht, (bei Name) .
Dies Funktioniert aber nicht.

Zudem verwende ich den FullRowselect Mode
Cellselect hat aber auch nichts gebracht.

Danke schon mal für eure Hilfe

19.05.2008 - 09:41 Uhr

Das ist echt ein Super Tutorial.

Gut kompakt erklärt.

Ich bin richtig auf den geschmak gekommen was mit SDL zumachen.Vorher war mir das zu umständlich weil es kaum gute Tutorials gab.

17.05.2008 - 17:07 Uhr

Also ich beschreibs mal wie es mal in meinen PluginSystem aussah.

Jede Assembly hatte eine Definitions Datei in XML.
In dieser gab es unterschiedliche Typen (Windows,ToolBox,Service).

Jeder Typ hate ein Interface IWindows,IToolBox usw. so könntest du es auch mit deine DB-Objekten machen.

als z.b IProjektObject oder IPluginForm

bsp xml

<Addon>
<ProjectObject name="Person" class="XYZ.Person" assembly="Plugin1.dll">
<ProjectObject name="Kunde" class="XYZ.Kunde" assembly="Plugin1.dll">
usw...

</Addon>

Dann musst du dir noch einen PLuginManager bauen..der die Datein dann parst
und die Objekte in einem Dictionary verwaltet.(Hierzu würd ich eine static klasse nehmen)(Hier wird auch nicht das eigentliche Object eingetragen sonndern nur wo es sich befindet)

Dann sollte man über eine FUnktion dann das Objekt aufrufen können.
z.b IProjectObject proj = (IProjectObject)PluginManager.GetProjectObject("Person");

Diese Funktion holt such über Reflection dann die Classe aus der Angebenen Assembly und erstellt eine Instanz

Die Interfaces werden natürlich im PluginManager definiert. Es geht auch nicht darum für jede Klasse ein eigenes Interface zu schreiben sonder ein Allgemeines Interface für mehrer Klassen.

Es ähnelt schon stark einen Microkernel^^ denn ich zurzeit baue.

14.05.2008 - 14:38 Uhr

Bei OneClick kannst du nur die Dateien Updaten die sich unmittelbar im Projekt befinden. Referenzierte Datei werden nicht geupdatet .
Externe Resourcen wie Setting Dateien XML Dateie etc bleiben außen vor.

Außerdemn kann immer nur das ganze Projekt updaten, keine einzelne Datei.

09.05.2008 - 14:12 Uhr

leider meckert er das er im Interface nichts statisches definieren kann mhh..

09.05.2008 - 13:18 Uhr

Vielen dank es funktzt!!



public sealed class DatabaseService :IDatabaseService
	{
       
        public delegate void DatabaseErrorDelegate(DBErrorType type,string message);
        public event DatabaseErrorDelegate OnDatabaseError;

        private static IDatabaseService instance;
		
		public static IDatabaseService Instance {
			get {

                if (instance == null)
                {
                    instance = new DatabaseService();
                }
				return instance;
			}
		}
		
		private DatabaseService()
		{
		}


habs jetzt so abgeändert

09.05.2008 - 12:51 Uhr

Hallo,
ich hab folgende Frage ich habe eine Singleton Klasse

z.b


public sealed class DatabaseService
	{
       
        public delegate void DatabaseErrorDelegate(DBErrorType type,string message);
        public event DatabaseErrorDelegate OnDatabaseError;

		private static DatabaseService instance = new DatabaseService();
		
		public static DatabaseService Instance {
			get {
				return instance;
			}
		}
		
		private DatabaseService()
		{
		}

Nun möchte ich ein Inteface dafür definiere. ´Bei Normalen Klassen wäre wäre das kein Problem nur bei Singleton hab ich irgendwie ein Brett vorm Kopf

Das Interface darf die Singleton klasse nicht kennen.
Also hab ich mir folgendes überlegt.



IDatabaseService
{
  static IDatabaseService Instance();
   void Funkrion1();

}


Problem ist nun das das Inteface erst instanziert werden muss 😦 oder gibts da ein anderen kniff. Irgendwie klappt das nicht..

29.04.2008 - 15:15 Uhr

So hab mir mal die aktuellste Version gezogen nun bekomm ich diesen
Fehler siehe Anhang.

Komischer weise ist die CPU Last nun nicht mehr merkbar....(auf die Exception vllt zurück zuführen ). Das Contextmenu refresht nun auch nicht mehr an der Seite wenn man es über den Pfeil aufruft

Das StartMenü lässt sich öffnen und geht sofort wieder zu mit der Exception oben ich bekomm die Exception jeder 3 Sekunden ^^

Ach und die Button beschriftung brauch etwas vorher steht da Glassbutoon1 usw

Hab auf dem Rechner Local Adminrechte

System WinXP Pro, Pentium D 2,8GHZ und 1GB Ram

Achja und zum Post weiter oben.

Mit Schließen bzw Minimiren ist gemein wennt man in der Taskleiste Doppelklick auf ein Fenster-Feld(ich nenns jetzzt einfach mal so) dann Minimiert es nicht wenn es Maximiert ist. Bei der Normalen Taskbar geht das

13.03.2008 - 09:58 Uhr

Ich benutze das WeifenLue Docking Suite;Die Klasse1 erbt von DockContent ,
die Klasse2 erbt von Klasse1. Nun möchte ich die Klasse2 aufrufen im Designer (es handelt sich natürlich um ein Control/Form).

Der Designer sagt mir dann

[Der Designer konnte für diese Datei nicht angezeigt werden, da keine der enthaltenen Klassen definiert werden kann. Der Designer hat folgende Klassen in der Datei überprüft: SideMenu -- Die BT.PluginManager.AbstractClasses.ToolBox-Basisklasse konnte nicht geladen werden. Stellen Sie sicher, dass auf die Assembly verwiesen wurde und alle Projekte erstellt wurden.

Obwohl ich in der ToolBoxKlasse von Dockcontent erbe und diese auch referenziert habe. Und in der Klasse2 auch ein verweise auf die WeifenLuo klasse gemacht habe. und auch ein verweis auf BT.PluginManager.AbstractClasses

Das komische ist nur in SharpDevelop wird alles korrekt dargestellt und ich kann im Designer arbeiten. Womit könnte das zusammen hängen?

Auch "Neuerstellen des Projektes" bringt nichts

11.03.2008 - 16:30 Uhr

Hab jetzt das gefunden was ich brauche .

Die Componente nennt sich SourceGrid2, und ist auch freeware.

11.03.2008 - 14:51 Uhr

Ich möchte ein simples Grid Control erstellen das so wie das
PropertyGrid aufgebaut ist vom aussehen,.

(Links die Beschreibung,rechts das Editibare Feld)

gibt es dafür ein Basis Grid Control auf dem das PropertyGrid aufbaut?

Ich verwende das Framework 2.0

In 3.0 Framework hab ich schon sowas gesehen..

07.03.2008 - 16:55 Uhr

Die Tasktbar ist eigentlich eine sehr gute Idee

System. WinXP SP2

aber ich hab dennoc einige Kritikpunkte:

  1. Die Taskleiste verbraucht 30-40% der Rechenleistung.

  2. Das Design der Taskbar lässt sich nicht ändern bzw. an das Standard Theme anpassen.

  3. Fenster lassen sich öffnen aber nicht schließen.Edit teilweise gehen se mal zu mal nicht man muss sehr viel klicken und das nervt

  4. Erst nachdem man im Menupunkt WinXP verwenden auswählt funktioniert die Taskbar richtig und man bekommt kein DWMAPI.dll fehler.

  5. Hässlicher Refresh Effekt wenn man auf dem Pfeil neben der CPU Auslastung drück. Das Menu was angeziegt wird , wird alle sekunde neu gezeichnet.

7.Der StartButton funktioniert bei mir nicht er kann das Startmenu nicht auslesen und gibt eine Exception.

  1. Die Quicklaunch Buttons sind sehr laggy.Reagieren erst nach mehrmaligen drücken

Hoffe das war nicht zu viel kritik 🙂 Hoffe du kannst das eine oder andere fixen.

04.03.2008 - 15:23 Uhr

Habs nun gelöst.

Bei SQLite ist ein Int32 ein SmallInt im Datenfeld. grr^^

jetzt gehts!

04.03.2008 - 12:19 Uhr

verwendetes Datenbanksystem: <SQLLite>

Ich habe folgendes Problem ich habe eine SQL Lite datenbank angelegt. Nun frage ich diese ab und diese füllt per Refelection direkt die Properties.

Nur leider bekomm ich bei einem Integer oder Int feld immer ein Int64 (Long) obwohl ich aber einen Int32(int) brauche...

Fehler:
Das Objekt mit dem Typ System.Int64 kann nicht in den Typ System.Int32 konvertiert werden.



public void Get(DataRow row)
        {

   
            PropertyInfo[] properties = this.GetType().GetProperties();

            foreach (PropertyInfo property in properties)
            {
                object[] attributes = property.GetCustomAttributes(true);

                foreach (object atr in attributes)
                {
                    if (atr is TableField)
                    {
                        if(row.Table.Columns.Contains(((TableField)atr).Name))
                        {
                            property.SetValue(this, row[((TableField)atr).Name], null);
                        }
                    }
                }

            }

        }




08.02.2008 - 10:51 Uhr

Ich bin neu in APS.Net und habe diesbezüglich eine eine Frage: kann ich mithilfe von ASP.NET 2.0 ein ClientSeitige Application in meine Webseite einbauen die z.b eine Datei herunterläd. (Ein integrierter Downloadmanager)? oder geht das nur über ActivX ?

Ein kleines Bsp. oder Link wäre auch hilfreich.

23.01.2008 - 12:37 Uhr

Hallo erstmal,

also ich habe Folgende Situation ich habe eine Klasse die auf Messages reagiert
und dann ein Event auslösen soll.
Die MessageKlasse hat ein EventProperty als String.
und eine auflistung von Propertys;

Ich habe mir nun gedacht das diese Klasse nach dem Event per Reflection sucht.
und dann eine Hilfsfunktion auruft die als CustomeAttribute festgelegt ist.

Diese Hilfsfunktion wiederum ruft das Event mit den richtigen Parametern auf und überprüft vorher ob der Event Abonniert ist oder nicht und ob alle Parameter wirklich gesetzt sind.
Nun möchte ich für das Event ein CustomeAttribute erstellen das die Reihenfolge der Properties festlegt also zb.

[CustomAttributeFunktion:InitFileTransfer]
[CustomAttributePropertysofFunktion:(long,"size"),(string,"name")]

Hierbei bezieht sich PropertysofFunktion auf die Propertys die in der Message.Property auflistung steht.

PropertysofFunktion soll die richtigen werte in die Hilfsfunktion einsetzen.

Kurze Skizzierung noch zum ablauf:

<--Message kommt

RichtigeMessage ausgewählt-->EventProperty vorhanden->Suche nach Event->Hilfsfunktion suchen->Parameter übergeben.->ausführen

Mein Problem ist nun wie ich die CustomAttributePropertysofFunktion:(long,"size"),(string,"name")] Klasse erstellen kann sodass ich immer weiter Attribute von der Struktur (typof(hier kann auch string verwendet werden),propertyname(string))
an mein CustomeAttribute "dran hängen" kann;

Ist dies über Params möglich?Jemand eine Idee

ansonsten feld mir nur noch
[CustomAttributeProperty:(long,"size")]
[CustomAttributeProperty:(string,"name")]
usw ein.

dies möchte ich eigentlich vermeiden.

02.01.2008 - 21:10 Uhr

also wie du das mit den starten machen wilst weiß ich nicht ,
wenn du das z.b über ein Button starten willst.. empfiehlt sich hier

System.Diagnostics(glaub so geschrieben) dort dann
die StopWatch Klasse.Mit der du dann ermittlen kannst wieviel zeit vergangen ist.

Bin mir nur nicht sicher ob es die Klasse im CF gibt im normalen jedenfalls schon.

als alternative würde ich einen DateTime abgleich vorschlagen, der jede sekunde(oder auch kürzer)... in einem Background Thread durchläuft und dann vergleicht:

(DateTime Aktuell - DateTime Start )> 50min und ggf die verbindung kappt

02.01.2008 - 20:10 Uhr

Also im DirectX SDK gibt es ein Plugin für Photoshop in dem du deine Jpeg TExturen in DDS umwandeln kannst..

Habs selber noch nicht getestet bin nur drüber gestolpert..

21.12.2007 - 11:09 Uhr

Da bei meinem Dictionary der Key dem Namen meines Objectes entspricht wäre glaube ich das mittel ding eine Lösung ...
nur wie packe ich das richtig an bzw auf was für eine Klasse muss ich aufbauen das ich das in ein PropertyGrid intergrieren kann? bzw. wie kann ich diesen Wrapper dann in das PropertyGrid intergiren?

Mein Dictionary ist an einem Objekt gekoppelt welches im PropertyGrid angeziegt wird.

Ich muss ja dann irgendwie zur Laufzeit das Dictionary umwandel als Liste und diese dann anzeigen lassen.

20.12.2007 - 14:25 Uhr

Ich habe einen Objekt das ein Generischen Dictionary als Propertie hat.
Nun möchte ich dieses im PropertyGrid bearbeiten können.

Mit einer List<TValue> klappt das ohne Probleme.

aber mit Dictionary<TKey,TValue> klappt es nicht.
Es wird nur eine leere Liste angezeigt.

Ich hoffe das Bild verdeutlicht was ich bezwecken möchte.

19.12.2007 - 13:36 Uhr

ja ein bsp das funktioniert würde mir auch reichen oder eine andere möglichkeit, ich glaube mit Soap kann man auch XML herunter laden oder aufrufen.

19.12.2007 - 13:27 Uhr

Ich möchte eine XML Datei die auf einem WebServer liegt herunterladen und diese
dannper XML Doc auslesen.

Nun habe ich aber folgendes problem ich bekomme immer ein ContentBody() not found zurück


HttpWebRequest http = HttpWebRequest.Create("http://www.xxx.de/xx.xml");
 WebResponse webResponse = webRequest.GetResponse();

StreamReader ResponseStream =   new StreamReader(WebResponse.GetResponseStream(),enc);


Leider hab ich jetz nicht den ganzen code bereit weil dieser grade auf einem anderen pc liegt.

10.12.2007 - 15:09 Uhr

ok probier ich mal aus thx

10.12.2007 - 14:58 Uhr

Ich programmierer zurzeit an einem kleines AutoUpdater-Plugin.

Meine Ausgangssituation ist das ich ein PluginVerzeichniss habe in dem sich Assemblys befinden. Der AutoUpdater holt sich ein Updatefile in dem die neuen Assembly versionen stehen. Nun soll überprüft werden in welcher Version eine Assembly vorliegt und ob diese dann ggf. geupdatet werden muss oder nicht.

Mein Problem besteht darin , dass ich die Assembly nicht in den Speicher laden möchte um die Version herauszufinden.

Es gibt ja die einfache Methode über Assembly.Load und dann GetVersion() (mein ich jedenfalls) nur läd er ja da die Assembly in den Speicher.

Ansonsten müsste ich in meiner externen xml datei eine version definieren.. das wäre die 2 möglichkeit und diese dann durch ein externes programm bei jedem build setzten lassen.

07.12.2007 - 11:14 Uhr

Also ich hab anhand des Tutorials
[Tutorial] Gezeichnete Objekte mit der Maus verschieben
ein GraphikObjekt für mein CustomControl erstellt.

Ich muss jetz eine TextBox nachbauen in dem der Text selektierbar ist.

Ich möchte jetz auch nicht hören benutze die TextBox oder erbe die Textbox.

Dies ist für meinen Fall nicht sinvoll da auch ander Objekte gezeichnet werden z.b eine Tabelle ein TexBlock etc in diesem Control.Ich möchte gerne ohne andere SubControls auskommen.

Gibt es eine möglichkeit diesen Text den ich Zeichne wie eine TextBox zu markieren bzw neuen text zu schreiben...`?
Oder muss ich für jeden Buchstaben ein Graphik Object erstellen das wäre weniger sinnvoll?

07.12.2007 - 11:09 Uhr

wie sieht denn deine Funktion AvarageImages aus?
Schließt du denn den Filestream bevor du ihn übergibst?

ansonsten könntest du den filestream vllt global in der klasse als parameter zugreif bar machen..

alsop zb.


class Klasse

private FileStrream _filestream = null;

public Int32 AverageImages(FileStream sInputfile,...) 
{
......
_filestream = sInputFile;
   
 switch(format)
 {
case irgendwas:
     protected Int32 DoAverage()
  }
}

kannste das nicht über den header herausfinden um was für eine Datei es sich handelt?

du darfst den FileStream auch nicht mehrmals öffnen ansonsten muss du ein Share Parameter beim FileStream Create setzen... ansonsten wird die Datei exklusiv für ein FileStream geöffnet und du kannst mit keinen anderen zugreifen..

04.12.2007 - 13:58 Uhr

thx hilft mir sehr weiter...
ja es kann auch ein filestream seinen...

hätte ich wohl auch drauf kommen können hatte wohl tomaten auf den augen ^^

Nur noch ne Blöde fragen wenn ich jetz zb Mehrmals die Dll lade ... wird doch der memory verbrauch viel größer oder wird dann erkann das es sich z.b um die Interface.dll handelt? und läd diese nicht nochmal in den speicher?

04.12.2007 - 13:02 Uhr

Ist es irgendwie möglich eine Assembly in einen MemoryStream zu laden und
diese dann über Assembly.Load aufzurufen. Ich möchte halt umgehen das die Dll gelockt wird.

Hab schon was gefunden das es wohl eine Load(byte[] rawAssembly gibt).
Nur wie bekomm ich die Assembly aus dem MemoryStream in das ByteArray?

04.12.2007 - 11:21 Uhr

hallo neurocoder,
also mein plugin system ist schon fast fertig programmiert...
in diesem bezug hab ich keine schwierigkeiten..

ich hab mich jetz dafür entscheiden das sich das entladen nicht lohnt
da es sich nicht um ein sehr großes programm handelt..

außerdem muss jede appdomain die dlls vom hauptprogramm nachladen ist bei meinen programm um umgänglich da z.b die Controls von einem PluginManagerControl erben...
und der PluginManager die Fenster Commands Toolboxen verwaltet ,die verfügbar sind und je nach aufruf sich die form aus der dll holt.
und der Core stellt auch noch ein SettingService bzw andere Services die noch folgen werden bereit und den Main IRCCore.

Bsp.Code kann ich leider grad nicht posten da der code sich auf einem anderen rechner befindet...

das Plugin ist in meine fall ein kleines Programm für sich was sich nur an bestimmte Interfaces halten muss damit es aufgerufen werden kann..

03.12.2007 - 16:25 Uhr

Eigentlich such ich nach einer Lösung die es ermöglicht
zwischen der HauptAppDomain und der PluginDomain zu kommunizieren..

zurzeit lade ich alle plugins ind die HauptAppDomain... was aber nicht sinvoll ist wenn ich z.b Plugins dynamisch updaten will....(AutoUpdater)

03.12.2007 - 12:12 Uhr

ja so hab ichs ja auch gemacht wie es in dem link beschrieben ist.

Nur konnte das Plugin dann nicht mehr auf die Main Appdomain zugreifen..

Ich habe z.b eine Statisch Klasse PluginManager auf der das Plugin aus der dll zugreifen muss weil es sich dort z.b ein Window hohlt was in einer Statischen Liste hinterlegt ist.

bei mir sieht das z.b so aus:

HauptApplikation->Menu Item wird gedrückt->COmmand ausführen->ExecuteCommand in PluginManager->GetCommandList()->Lade Command von Assembly->Execute()->Hier zb. Rufe Window auf OpenWindow->GetWindows from LoadedPlugins in PluginManager.Windows-> schmeiß das Control auf die Form.

Funktioniert soweit auch nur wenn ich das z.b in eine eigene AppDomain packe dann bekommt das geladene Plugin nicht die WindowListe z.b vom pluginmanager weil dieser in der MainDomain hängt und statisch ist.

03.12.2007 - 11:55 Uhr

Ich Entwickle zurzeit einen Pluginmanager für mein Program..

Die DLLs lade ich Dynamisch und erzeuge dann eine Instann von dem Objekt in der DLL.
Dazu verwende ich den AppDomain und CreateInstanceFromUnwrap (ich mein so hieß der befehl).

Mein Problem ist nun wie entlade ich diese dll wieder? Gibt es dazu eine Möglichkeit?

Ein Versuch von mir war, das ich die DLL in eine eigene AppDomain geladen haben , ich konnte sie dann auch wieder entladen mit AppDOmain.Unload().
Leider läuft bei dieser Variante die DLL in einer Sandbox und weiß von dem Rest der Applikation nichts.. dies ist aber in meinen Fall nicht sinvoll. Weil die DLL auf den rest der Applikation zugreifen muss...

Gibt es über Assembly eine möglichkeit eine Instanz zu erstellen und diese dann zu Laden und zu Entladen??

27.11.2007 - 17:12 Uhr

jetz hab ich den fehler gefunden in meinen vorschau programm funktioniert das wunderbar nur irgendwie nicht im richtigen programm....


^(?<strasse>\w+([\D|\W]\w+)*)[\D|\W]*(?<kurzel>strasse|straße|str|weg|allee|platz)[\D|\W]*(?<nummer>\d+\w+)$

Im Programm


	public void DoProgress()
		{
		DataTable dt = DatabaseService.Instance.Query("glaskugel","SELECT * FROM importliste ORDER BY cpe ASC LIMIT 10 ");
		ProgressStart(dt.Rows.Count,new TimeSpan(0));
		Regex regex = new Regex(@"^(?<strasse>\w+([\D|\W]\w+)*)[\D|\W]*(?<kurzel>strasse|straße|str|weg|allee|platz)[\D|\W]*(?<nummer>\d+\w+)$");
		Stopwatch watch = new Stopwatch();
		
		for(int i =0; i<dt.Rows.Count;i++)
		{
			watch.Start();
			string tmp = (string)dt.Rows[i]["strasse"];
			tmp = tmp.ToLower();
			tmp = tmp.TrimEnd();
			Match match = regex.Match(tmp);
			if(match.Length !=0)
			{
				string str =(string)match.Groups["strasse"].Value;
				string strkuerzel = (string)match.Groups["kuerzel"].Value;
				string nummer = (string)match.Groups["nummer"].Value;
				
				DatabaseService.Instance.Query("glaskugel","UPDATE importliste SET strname='"+str+"',strkuerzel='"+strkuerzel+"',strnr='"+nummer+"' WHERE cpe='"+dt.Rows[i]["cpe"]+"'");
			}
			
			watch.Stop();
			
			TimeSpan span =	TimeSpan.FromMilliseconds(watch.Elapsed.TotalMilliseconds * (Convert.ToDouble(dt.Rows.Count)-Convert.ToDouble(i)));
			
			this.ProgressChange(i+1,span);
			
		}
		
		this.ProgressEnd();
			
		}


Eigtl ist dort kein fehler zusehen oder ich bin blind ^^

27.11.2007 - 16:46 Uhr

Hallo ich habe vollgendes problem,
ich muss von einer Strasse den Namen das Kürzel (z.b Str. Weg etc..) und die Nummer herausfinden. Der Straßen name kann unterbrochen seien oder durch einen bindestrich getrennt.

Ein paar Beispiele

Hallo-Weg 54b
Hallo-Heute-Str 34
HalloStr 12
Hallo Str 12
Hallo-Gutentag Weg 12b

Ich habe das bis jetz über RegEx gelöst.. funktioniert bei Str sehr gut nur ignoriert er irgendwie das Oder...so das auch Weg oder anderes zutreffen kann


^(?<strasse>\w+([\D|\W]\w+)*)[\D|\W]*(?<kurzel>STR|STRASSE|STRAßE|WEG|ALLEE)[\D|\W]*(?<nummer>\d+\w+)$

STR wähl er aus aber die anderen sachen werden nicht erkannt... fällt vielleicht ne klammer oder so was... ? oder ist das so wie ich denke nicht möglich?

27.11.2007 - 12:17 Uhr

ok danke werds mal per Interface versuchen...

26.11.2007 - 17:54 Uhr

ja gut public kann sie ja seien nur nicht sichbar werd mal Internal ausprobieren...
bin jetz aber erstmal weg....

26.11.2007 - 17:49 Uhr

Um es noch mal zu verdeutlichen.
Man soll halt nicht auf die "interne" Liste zugreifen können.

Also nicht so wie


TestKlasse.InterneListe liste = new TestKlasse.InterneListe();

sonder halt nur über


TestKlasse klasse = new TestKlasse();
klasse.liste[i];

soll auf die Liste zugegriffen werden können.

Bei der Liste wird ein Item zurückgegeben was auch in der Klasse definiert ist. Dieses ist aber Public.

26.11.2007 - 16:48 Uhr

Hier mal ein kleiner Ausszug warum ich das so umständlich machen will...


GarageKlasse garage= new GarageKlasse();
garage.Autos[index];



so muss man nicht die Liste noch mal Extra Instanzieren.
Ist ja so ähnlich wie bei einem ListView.

Das mit Internal ist eine gut idee werd ich mir mal anschauen.

26.11.2007 - 16:28 Uhr

Mit der Aufteilung meinte ich das die Verschachtelte Klasse nicht auf der gleichen
CodePage (cs.Datei) ist wie die darüberliegende.

So dass eine größere Übersicht gewährleistet ist.

Und das Obrige ist kein wieder spruch in sich... nehmen wir mal an man
hat ein AutoKlasse und hat dort eine COllection Autos.


class AutoKlasse
{
  
      public InterneAutos Autos
{
if(InterneAutos == null) return new InterneAutos();
else return InterneAutos;
}
       

       public class InterneAutos : CollectionBase
       {

      }



}

Wenn ich nun zb die AutoKlasse Instanziere dann is die
AutoKlasse.Autos und AutoKlasse.InterneAutos für mich sichtbar,
dies möchte ich aber verhindern.Es soll nur die AutoKlasse.Autos angezeigt werden.

Dazu habe ich mir halt gedacht das ich diese auf Private setzte damit sie nicht sichtbar ist sozusagen...

Hoffe das ist jetzt verständlicher.

26.11.2007 - 16:16 Uhr

ah ok... war ja nur nen vorschlag... hilft dir das denn weiter also sonst sehe ich kein fehler mehr...

26.11.2007 - 15:30 Uhr

Als man nehme folgenden Code:



	public class TestKlasse
	{
		
		
		public TestItem1 Item {
			get { return new TestItem1() }
		}
		
		public TestKlasse()
		{
		}
		
		
		private class TestItem1
		{
			
		}
	}


Wieso sagt der COmpiler mir
Inkonsistenter Zugriff: Der Eigenschaftentyp testapp.service.TestKlasse.TestItem1 ist weniger zugreifbar als die Eigenschaft testapp.service.TestKlasse.Item. (CS0053) - C:\Dokumente und Einstellungen\far\Eigene Dateien\SharpDevelop Projects\testapp\TestKlasse.cs:21,20

Ich weiß das die Klasse Privat ist aber ich möchte über ein Externes Property drauf zurgreifen können ohne das die Interne Klasse für andere sichtbar ist....

Zu meiner 2 Frage.

Ich habe z.B eine Klasse Database und DatabaseServices die DatabaseServices soll auf Database zugreifen sie soll aber nur für DatabaseServices sichtbar seien...

Dazu ist noch zusagen das die DatabaseServices eine Singleton Klasse ist.

Also eine methode wäre ja das verschachteln der Klasse gibt es da noch eine intelligenterer Lösung... und wie kann ich diese Klasse dann auf mehrer Seiten aufteilen ..??

geht das auch vllt irgednwie über den namespace??! das man dann die irgendwie als internal machen kann .. ich möchte halt nur das der DatabaseServices auf die Database zugreifen kann und kein anderer

26.11.2007 - 15:15 Uhr

C#-Code:


public class SvgAboutInfo {
        private string _AboutInformations;
        private string _Product;
        private string _Version;
        private string _Company;
        private string _CopyRight;

        public delegate void AboutInformationsChangedDelegate();
        public event AboutInformationsChangedDelegate AboutInformationChangedEvent;

        public SvgAboutInfo() {

   this.AboutInformationChangedEvent += new AboutInformationsChangedDelegate(tuwas);

        }

        //Hier nich einen Event werfen, wenn sich das Propertie geändert hat, damit die AboutForm weiß,
        //wann wie die RichTextBox aktualisieren soll
        public string AboutInformations {
            get { return _AboutInformations; }            
            set { _AboutInformations = value; RaiseEvent(); }
        }

        public void RaiseEvent() {
            if (AboutInformationChangedEvent != null) {

                AboutInformationChangedEvent();
///WÜRD ICH SAGEN NIX MIT INVOKE

            }

          void tuwas()
          {
             if(this.InvokeRequiered)
             {
            this.Invoke(AboutInformationChangedEvent);
            return;
             }

          }


     


        }  
 

ich ruf das normaler weise direkt über den eventhanlder auf also ohne funktion
schließlich isses ja auch nen event
vielleicht hiflt dir das weiter

hier mal kleiner auszug von mir


public delegate void ProgressEventHandler(int i);
	public delegate void ProgressFinishEventHandler();
	
	public event ProgressEventHandler ProgressStart;
	public event ProgressEventHandler ProgressChange;
	public event ProgressFinishEventHandler ProgressEnd;
		
		public ListControl()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// TODO: Add constructor code after the InitializeComponent() call.
			//
			this.ProgressStart += new ProgressEventHandler(OnProgressStart);
			this.ProgressChange += new ProgressEventHandler(OnProgressChange);
			this.ProgressEnd += new ProgressFinishEventHandler(OnProgressEnd);
			
			
		}
		
		void Button1Click(object sender, EventArgs e)
		{
			
			Thread pth = new Thread(new ThreadStart(DoProgress));
			pth.Start();
		
			
			this.button1.Enabled = false;
		}
		
		public void DoProgress()
		{
			....

			ProgressStart(db.Rows.Count);
                                                ......


			for(int i=0;i<db.Rows.Count;i++)
			{
			    ......

				
				ProgressChange(i+1);
			}
			
			ProgressEnd();
	
			                                              
		}
		
		public void OnProgressStart(int i)
		{
			if(this.progressBar1.InvokeRequired || this.label1.InvokeRequired || this.label2.InvokeRequired)
			{
				this.progressBar1.Invoke(ProgressStart,new object[]{i});
				this.label1.Invoke(ProgressStart,new object[]{i});
				this.label2.Invoke(ProgressStart,new object[]{i});
				return;
			}
		
			this.progressBar1.Minimum=0;
			this.progressBar1.Maximum=i;
			this.label1.Text = "0";
			this.label2.Text = i.ToString();
			
		}
		public void OnProgressChange(int i)
		{
			if(this.progressBar1.InvokeRequired || this.label1.InvokeRequired || this.label2.InvokeRequired)
			{
				this.progressBar1.Invoke(ProgressChange,new object[]{i});
				this.label1.Invoke(ProgressChange,new object[]{i});
				this.label2.Invoke(ProgressChange,new object[]{i});
				return;
			}

			this.progressBar1.Value=i;
			this.label1.Text = i.ToString();
			
		}
		public void OnProgressEnd()
		{
				
			if(this.progressBar1.InvokeRequired || this.label1.InvokeRequired || this.label2.InvokeRequired)
			{
				this.progressBar1.Invoke(ProgressEnd);
				this.label1.Invoke(ProgressEnd);
				this.label2.Invoke(ProgressEnd);
				return;
			}
			
			
			this.button1.Enabled = true;
			
		}


23.11.2007 - 15:53 Uhr

soo hab das mal mit memorystream gemacht...



	public byte[] ToBytes()
			{
				byte[] packet = new byte[1024];
				
				byte[] ack = BitConverter.GetBytes(_ackid);
				byte[] clientid = BitConverter.GetBytes(_clientid);
				
				ASCIIEncoding enc = new ASCIIEncoding();
				
				byte[] text =enc.GetBytes(_text);
				
				MemoryStream mem = new MemoryStream();
				mem.Write(ack,0,4);
				mem.Write(clientid,0,4);
				mem.Write(text,0,1024-8);
				
				mem.Read(packet,0,1024);
				mem.Close();
				
				return packet;
				
			}


Mein Problem ist nur noch das text so groß wie 1012bytes seien muss

seien soll und ich die bytes dann mit 0 füllen muss.... die dahinter kommen... irgendwelche ideen?

iregdnwie so


public byte[] ToBytes()
			{
				byte[] packet = new byte[1024];
				
				byte[] ack = BitConverter.GetBytes(_ackid);
				byte[] clientid = BitConverter.GetBytes(_clientid);
				
				ASCIIEncoding enc = new ASCIIEncoding();
				
				byte[] text =enc.GetBytes(_text);
				byte[] b = new byte[1]{null};
				while(text.Length < (1024-8))
				{
					Array.Copy(b,text,1);
				}
				
				MemoryStream mem = new MemoryStream();
				mem.Write(ack,0,4);
				mem.Write(clientid,0,4);
				mem.Write(text,0,1024-8);
				
				mem.Read(packet,0,1024);
				mem.Close();
				
				return packet;
				
			}
23.11.2007 - 14:21 Uhr

Definiere doch ein Interface welche funktionen der Programmierer Implementiern muss zb.


Interface IAuto
{
   void MotorStarten();
   void Tuer();

  //HIER KANNSTE dann auch noch Properties definieren weis den Syntax nicht ausm kopf

   Reifen Autoreifen{get;set}


}


so dann kannste jetz in einer Klasse zb das Interface einbinden


class Audi : IAuto
{

//Hier müssen dann die funktieon implementiert werden sacht dann VisualStudio oder SharpDevelop auch (ALt+Einfg)


}

Wenn du ein Plugin Loader oder sowas Plannts kannste dann beim laden der Assembly überprüfen ob er das Interface Implementiert hat ansosnt wird die Assembly z.b nicht geladen

23.11.2007 - 13:34 Uhr

Hallo ich hab vollgendes Problem ,

ich habe ein Packet was aus 1024Bytes besteht ,weis nicht obs sinvoll ist aber ich stehe grad am anfang, zurrück zum eigtlichen,
Die Bytes aus dem Packet auslesen habe ich schon hinbekommen nun möchte ich in das Packet die Bytes rein packen dies kann über ein einfaches byte[] array realsiert werden nur muss ich die byte[] array s irgednwie zusammenfügen
und den text am ende mit leeren bytes füllen...

wie bekomm ich das am besten hin..

Hier mal nen kleiner ausszug aus dem source code...




public class Message
		{
			int _ackid;
			int _clientid;
			string _text;
			
			public Message(int ackid, int clientid, string text)
			{
				this._ackid = ackid;
				this._clientid = clientid;
				this._text = text;
			}
			
			public byte[] ToBytes()
			{
				byte[] ack = BitConverter.GetBytes(_ackid);
				byte[] clientid = BitConverter.GetBytes(_clientid);
				
				ASCIIEncoding enc = new ASCIIEncoding();
				
				byte[] text =enc.GetBytes(_text);
				
				return ack;
				
				
			}
			
			public void Get(byte[] b)
			{
				this._ackid = BitConverter.ToInt32(b,0);
				this._clientid= BitConverter.ToInt32(b,4);
				ASCIIEncoding enc =  new ASCIIEncoding();
				this._text = enc.GetString(b,8,b.Length-8);
				
				
			}
		
19.11.2007 - 11:04 Uhr

hab den fehler gefunden hab die graphic objekte jedes mal beim Paint gecleared^^

hab nun das in Add und Clear Events ausgelagert so das nur ein Objekt beim Add hinzugefügt wird und alle nur gecleart werden wenn wirklich die Items gecleart werden....

funktioniert jetz auch wunderbar ^^


[System.ComponentModel.EditorBrowsableAttribute()]
		protected override void OnMouseMove(MouseEventArgs e)
		{
			base.OnMouseMove(e);
			
			// wenn die Maus außerhalb der Zeichenfläche gedrückt wird abgebrochen
			if(!_canvas.Contains(e.Location)) return;
			
			
			for(int i = _graphicObjects.Count -1; i >= 0;i--)
			{
				GraphicObjekt go = _graphicObjects[i];

						if(go.Contains(e.Location))
						{
							//HIER FUNKTIONIERT ES NICHT WIESO???!!!
							
												
									if(go is ItemGraphicObject)
									{
									ItemGraphicObject igo = (ItemGraphicObject)go;
									igo.Hovered = true;
									
										
									this.Invalidate(igo.Rect);
									}
								
								
						}
						
						else
						{
							if(go is ItemGraphicObject)
							{
							ItemGraphicObject igo = (ItemGraphicObject)go;
							
								if(igo.Hovered == true)
								{
									igo.Hovered = false;
									this.Invalidate(igo.Rect);
								}
							
										
							
							}
						}
				
			}
			
			
		}

16.11.2007 - 17:11 Uhr

hab noch nen fehler entdeckt aber prob weiterhin


	if(go.Contains(e.Location))
						{
						
							if(go is ItemGraphicObject)
							{
								ItemGraphicObject igo = (ItemGraphicObject)go;
								if(_lastselecteditem != igo)
								{
								
								igo.Hovered = true;
								
								
								
								_lastselecteditem =igo;
								
								this.Invalidate(igo.Rect);
								}
							}
							hitobjekt = true;
						}


16.11.2007 - 17:05 Uhr

Hab das jetz mal gemacht wie du gesagt hast nur hab ich
jetz das Flicker Problem und irgendwie meint er die Objekte wäre nicht gleich was eigentlich nicht stimmt


protected override void OnMouseMove(MouseEventArgs e)
		{
			base.OnMouseMove(e);
			
			// wenn die Maus außerhalb der Zeichenfläche gedrückt wird abgebrochen
			if(!_canvas.Contains(e.Location)) return;
			
		
			bool hitobjekt = false;
			
			
			for(int i = _graphicObjects.Count -1; i >= 0;i--)
			{
				GraphicObjekt go = _graphicObjects[i];

						if(go.Contains(e.Location))
						{
						
							if(go is ItemGraphicObject)
							{
								ItemGraphicObject igo = (ItemGraphicObject)go;
								if(_lastselecteditem != igo)
								{
								
								igo.Hovered = true;
								hitobjekt = true;
								
								
								_lastselecteditem =igo;
								
								this.Invalidate(igo.Rect);
								}
							}
							
						}
				
			}
			
			if(hitobjekt == false)
			{
				for(int i = _graphicObjects.Count -1; i >= 0;i--)
				{
					GraphicObjekt go = _graphicObjects[i];
						
					if(go is ItemGraphicObject)
					{
						ItemGraphicObject igo = (ItemGraphicObject)go;
						if(igo.Hovered == true)
						{
							igo.Hovered= false;
							this.Invalidate(igo.Rect);
						}
					}
				}
			}

Modifizierte Objekt



			public class ItemGraphicObject : GraphicObjekt {
				int _itemindex;
				string _text;
				Rectangle _rect;
				Color _itemcolor;
				Font _itemfont;
				Color _itemfontcolor;
				Color _itemhighlightcolor;
				Color _itemhighlightfontcolor;
				bool _hovered;
				
				
				public ItemGraphicObject(Pen pen,Color itemcolor,Font itemfont,Color itemfontcolor,Color itemhighlightcolor,Color itemhighlightfontcolor,Rectangle rect,int itemindex,string text) : base(pen)
				{
					this._rect = rect;
					this._itemindex =itemindex;
					this._text =text;
					this._itemcolor = itemcolor;
					this._itemfont = itemfont;
					this._itemfontcolor = itemfontcolor;
					this._itemhighlightcolor = itemhighlightcolor;
					this._itemhighlightfontcolor = itemhighlightfontcolor;
					
					Path.AddRectangle(rect);
					
				
				}
				public override void Draw(Graphics g)
				{
					base.Draw(g);
					
					if(_hovered == true)
					{
					g.FillRectangle(new SolidBrush(_itemhighlightcolor),_rect);
					g.DrawString(_text,_itemfont,new SolidBrush(_itemhighlightfontcolor),_rect);
					}
					else
					{
					g.FillRectangle(new SolidBrush(_itemcolor),_rect);	
					g.DrawString(_text,_itemfont,new SolidBrush(_itemfontcolor),_rect);
					}
					
					
					
					
					
				}
				
				public string Text {
					get { return _text; }
				}
				
				public int Itemindex {
					get { return _itemindex; }
				}
				
				public bool Hovered {
					get { return _hovered; }
					set { _hovered = value; }
				}
				
				
				public Rectangle Rect {
					get { return _rect; }
				}

				
			}