Laden...

Forenbeiträge von Muphin Ingesamt 174 Beiträge

07.12.2006 - 14:17 Uhr

Dankeschön, ich glaub das is ne echt gute Idee, daran hab ich noch gar nicht gedacht!
Mit ist nämlich auch grad aufgefallen dass das so wie ich mir das bisher gedacht hatte gar nich funktionieren würde, da das context menu für mehrere TextBoxen verwendet wird wären sonst die Häkchen ja andauernd falsch gesetzt!

Gruß Muphin

07.12.2006 - 13:36 Uhr

So als Tipp: Am besten mal die ganzen member von dem Event anschauen!

und in diesem Fall: e.Handled = true;

07.12.2006 - 12:26 Uhr

So nun mal zu nem wirklichen Problem!
Die CheckBoxen in dem TreeView werden bei mir die CheckBoxen vor dem Text nicht richtig gezeichnet wenn der darüberliegende Node expandiert ist, ich hab schon das base.OnDrawNode an anfang gesetzt aber das hat überhaupt nichts geholfen, ich schätze mal dass in dem TreeView irgend eine Linie oder was anderes danach noch über die CheckBoxen gezeichnet wird, so dass diese verschwinden, denn sie flackern kurz auf! Außerdem bräuchte ich noch nen Tipp wie ich das blaue markierungsfeld auch nach rechts verschieben kann, das ist so nämlich genau über meinen CheckBoxen!


      protected override void OnDrawNode(DrawTreeNodeEventArgs e)
      {
         e.DrawDefault = false;
         base.OnDrawNode(e);
         int a_rectMargin = 3;
         int a_rectHeight = 11;
         int a_rectX = e.Bounds.Left + a_rectMargin;
         int a_rectY = e.Bounds.Top + (e.Bounds.Height / 2) - (a_rectHeight / 2);
         int a_textMargin = 4;
         int a_textX = e.Bounds.Left + a_textMargin + a_rectHeight;
         int a_textY = e.Bounds.Top;
         if (e.Node.Tag is bool && e.Node.IsVisible)
         {
            if ((bool)e.Node.Tag)
            {
               if (e.Node.Checked )
               {
                  e.Graphics.DrawRectangle(new Pen(Color.Black, 2), a_rectX, a_rectY, a_rectHeight, a_rectHeight);
                  Point[] a_points = new Point[] { new Point(a_rectX + 1, a_rectY + 4),
                     new Point(a_rectX + 4, a_rectY + 7), new Point(a_rectX + a_rectHeight - 2, a_rectY + 2) };
                  e.Graphics.DrawLines(new Pen(Color.Black, 2), a_points);
                  e.Graphics.DrawString(e.Node.Text, this.Font, new SolidBrush(this.ForeColor), a_textX, a_textY);
               }
               else
               {
                  e.Graphics.DrawRectangle(new Pen(Color.Black, 2), a_rectX, a_rectY, a_rectHeight, a_rectHeight);
                  e.Graphics.DrawString(e.Node.Text, this.Font, new SolidBrush( this.ForeColor ), a_textX, a_textY);
               }
            }
         }
         else
         {
            e.Graphics.DrawString( e.Node.Text, this.Font, new SolidBrush( this.ForeColor ), e.Bounds.Location );
         }
      }

Gruß Muphin

07.12.2006 - 11:25 Uhr

Sorry, ich bin echt doof, hätte mir nur mal die Invalidate Funktion richtig anschauen müssen, ein Rectangle hab ich ja schon, also einfach


this.Invalidate(a_rect);

Und das obwohl ich mir das Tutor schon merhmals angeschaut habe!

07.12.2006 - 11:03 Uhr

versuchs mal als LocalService oder LocalSystem, ich hatte da auch mal ein Problem und mit einem von beiden gings dann und mit dem anderen nicht!
Achso, das is die Eigenschaft Account vom serviceProcessInstaller!

07.12.2006 - 10:53 Uhr

Hallo wiedermal!
Ich hab für einen eigenen TreeView erstellt bei dem hinter bestimmten Nodes eine CheckBox gezeichnet wird, wenn ich jetzt auf eine dieser CheckBoxen klicke wird entsprechend die Checked Eigenschaft gesetzt und im moment mache ich noch ein Invalidate() auf den kompletten TreeView, was aber sehr performance-fressend ist, ist es irgendwie möglich nur den kleinen Bereich der CheckBox neu zu zeichnen?


      protected override void OnDrawNode(DrawTreeNodeEventArgs e)
      {
         int a_rectMargin = 1;
         int a_rectHeight = 11;
         int a_rectX = e.Bounds.Right + a_rectMargin;
         int a_rectY = e.Bounds.Top + (e.Bounds.Height / 2) - (a_rectHeight / 2);
         e.DrawDefault = true;
         if (e.Node.Tag is bool && e.Node.IsVisible)
         {
            if ((bool)e.Node.Tag)
            {
               if (e.Node.Checked)
               {
                  e.Graphics.DrawRectangle(new Pen(Color.Black, 2), a_rectX, a_rectY, a_rectHeight, a_rectHeight);
                  Point[] a_points = new Point[] { new Point(a_rectX + 1, a_rectY + 4),
                     new Point(a_rectX + 4, a_rectY + 7), new Point(a_rectX + a_rectHeight - 2, a_rectY + 2) };
                  e.Graphics.DrawLines(new Pen(Color.Black, 2), a_points);
               }
               else
               {
                  e.Graphics.DrawRectangle(new Pen(Color.Black, 2), a_rectX, a_rectY, a_rectHeight, a_rectHeight);
               }
            }
         }
         base.OnDrawNode(e);
      }

      protected override void OnMouseClick(MouseEventArgs e)
      {
         foreach (TreeNode a_treeNode in this.Nodes)
         {
            searchRecursive(a_treeNode, e);
         }
         base.OnMouseClick(e);
      }

      private void searchRecursive(TreeNode t_node, MouseEventArgs e)
      {
         // test the Node-CheckBox witch the MouseClick position
         int a_rectMargin = 2;
         int a_rectHeight = 13;
         int a_rectX = t_node.Bounds.Right + a_rectMargin;
         int a_rectY = t_node.Bounds.Top + (t_node.Bounds.Height / 2) - (a_rectHeight / 2);
         if (t_node.Tag is bool)
         {
            Rectangle a_rect = new Rectangle( a_rectX, a_rectY, a_rectHeight, a_rectHeight);
            if (a_rect.Contains(e.Location))
            {
               if (t_node.Checked)
               {
                  t_node.Checked = false;
                  this.Invalidate(); //HIER NUR DIE CHECKBOX NEU ZEICHNEN?
               }
               else
               {
                  t_node.Checked = true;
                  this.Invalidate(); //HIER NUR DIE CHECKBOX NEU ZEICHNEN?
               }
            }
         }
         // search each node recursively.
         foreach (TreeNode a_treeNode in t_node.Nodes)
         {
            searchRecursive(a_treeNode, e);
         }
      }

07.12.2006 - 10:38 Uhr

Also da du den Grund schon weißt sollte die Lösung ja nicht arg schwer sein, einfach einen anderen Speicherplatz wählen!
Höchstens du willst/musst unbedingt auf diesen Pfad zugreifen, da musst du denk ich die Rechte für dein Programm entsprechend setzen, leider weiß ich auch noch nicht wie das geht, aber ich denke google oder msdn wissen die antwort, vielleicht stehts auch schon irgendwo hier im Forum!

07.12.2006 - 10:32 Uhr

Also wenn du VS2003 zum programmieren verwendest, kann .Net2.0 nicht benutzt werden!

07.12.2006 - 09:34 Uhr

Also ich versteh nicht ganz wie du das mit dem Webservice meinst, hast du selber einen WebService Programmiert und willst jetzt mit einem WebClient darauf zugreifen und er compiliert den Client nicht richtig? Die Datenbank liegt auf der WebService seite oder? Beschreib das ganze doch erst mal etwas genauer damit man genau versteht was nicht funktioniert!

07.12.2006 - 08:59 Uhr

Guten Morgen!
Ich hab in meinem Programm mehrere TextBoxen über die man entweder per Tastatur oder über ein ContextMenu Zahlen von 1-9 eintragen kann, jetzt würde ich gerne in dem ContextMenu neben den entsprechenden Zahlen immer das Häkchen setzen wenn die Zahl in der TextBox steht bzw. die Checked Eigenschaft auf false setzen wenn die Zahl nicht mehr in der TextBox steht!
Solange man nur Zahlen über das ContextMenu eingibt ist das ja kein problem!
Sobald man was über die Tastatur eingibt hab ich jetzt erst mal das KeyPress Event verwendet, die entsprechenden ContextMenu Einträge dann auf Checked zu setzen klappt auch gut, nur wenn man jetzt die Backspace Taste oder die Entf Taste drückt müsste ich ja wissen wo der Cursor steht damit ich dann weiß welchen ContextMenu Eintrag ich demarkieren muss, zusätzlich besteht noch das Problem dass das OnKeyPress Event von der Entf-Taste gar nicht ausgelöst wird!
Hat jemand einen guten Lösungsansatz für mich?


      private void xxx_KeyPress(object sender, KeyPressEventArgs e)
      {
         if( sender is TextBox )
         {
            TextBox a_txtBox = (TextBox)sender;
            if( '1' <= e.KeyChar && e.KeyChar <= '9' )
            {
               int a_zahl = int.Parse( e.KeyChar.ToString() );
               a_txtBox.ContextMenu.MenuItems[ a_zahl - 1 ].Checked = true;
               //MenuItems[ 9 ] ist der löschen Eintrag
               a_txtBox.ContextMenu.MenuItems[ 9 ].Checked = false;
            }
            else if( (char)Keys.Back == e.KeyChar )
            {
               //Bei Backspace die letzte Zahl der TextBox nehmen
               char[] a_txtAr = a_txtBox.Text.ToCharArray();
               if( a_txtAr.Length > 0 )
               {
                  int a_zahl = int.Parse( a_txtAr[ a_txtAr.Length - 1 ].ToString() );
                  a_txtBox.ContextMenu.MenuItems[ a_zahl - 1 ].Checked = false;
                  if( a_txtAr.Length == 1 )
                  {
                     //MenuItems[ 9 ] ist der löschen Eintrag
                     a_txtBox.ContextMenu.MenuItems[ 9 ].Checked = true;
                  }
               }
            }
            else         
            {
               e.Handled = true;
            }
         }
      }

06.12.2006 - 08:28 Uhr

@nils
Also die prinzipien zu nullReferenceExceptions sind mir schon bewusst! Ich hatte das hier reingestellt weil ich davon ausgegangen bin dass das VS2005 misst baut!

Ich hab den Fehler jetzt auch gefunden, ich bin mal mit dem Debugger ganz von anfang an durch den ganzen Code gesteppt und habe dabei festgestellt dass der Designer im VS2005 das ganze anders umsetzt, und zwar hat er im InitializeComponent noch zusätzlich die ganzen member die in ChartDescription drinstehen einzeln initialisiert und weist danach dann this.m_chart1.ChartDescription = chartDescription1 zu!
Da bei mir die initialisierung von Columns über die Funktion ChartDescription.InitDefault() durchgeführt wird und nicht über den Standardkonstruktor hat Columns danach eine Null Reference!
Ich verstehe nur nicht warum der Designer den Code so blöd umsetzt, schließlich werden die ganzen Member von ChartDescription ja schon durch den Konstruktor von Chart initialisiert, somit ist bis zum Zeitpunkt von this.m_chart1.ChartDescription = chartDescription1 alles so wies sein soll!

Danke für eure Bemühungen!

MFG Muphin

05.12.2006 - 15:44 Uhr

Also ChartDescription ist soweit so wies sein soll, also nicht = null und in newColumn steht auch das was drinstehen soll, der Debugger zeigt bei Columns als Wert null an, _defaultCapacity ist 4! Im VS 2003, und dort läuft genau der selbe Code steht halt ChartDescription.Columns {Count=0}! Wie soll ich die ArrayList denn initialisieren dass der compiler da kein Problem mehr hat? Die List wird ja schließlich nicht zwischendrin wieder auf null gesetzt, sonst würde es im VS2003 wohl auch nicht tun!

Gruß Muphin

05.12.2006 - 15:35 Uhr

Ich denke mal das ist eher eine vorliebe des jeweiligen Programmierers!
Ich würde dafür eher while( true ) schreiben!

05.12.2006 - 14:48 Uhr

Guten Tach!
Ich hab gerade eine Solution im VS2005 Express geöffnet die bisher in VS2003 problemlos lief und jetzt bekomme ich beim aufruf der Add funktion einer ArrayList eine NullReferenceException, ich versteh absolut nicht wieso!

Hier mal die denke ich relevanten Teile des Codes:


public class Chart : CustomPanel
{
      private ChartDescription	m_ChartDescription;

      public Chart()
      {
         InitializeComponent();
         this.InitDefault ();
      }

      public void InitDefault ()
      {
         this.ChartDescription = new ChartDescription ();
         this.ChartDescription.InitDefault ();
      }

      public ChartDescription	ChartDescription
      {
         get { return m_ChartDescription; }
         set { m_ChartDescription = value; }
      }

      public ChartColumn AddColumn ( double[] values, string title )
      {
         double[] a_values = adjustValues( values );
         ChartColumn	newColumn = this.AllocateColumn( a_values, title );

         // Add column
         this.ChartDescription.Columns.Add(newColumn); //HIER TRITT DIE EXCEPTION AUF
         return newColumn;
      }
}

public class ChartDescription : IDisposable
{
      private ArrayList m_Columns;
      public ChartDescription()
      {
      }

      public void InitDefault ()
      {
         this.m_Columns = new ArrayList ();
      }

	public ArrayList Columns
	{
	   get {return m_Columns; }
	}
}

Hoffe ihr könnt mir helfen!

04.12.2006 - 16:32 Uhr

gut zu wissen!

Aber das würde ja heißen dass Backspace ein druckbares Zeichen ist und Entf nicht oder wie!?

04.12.2006 - 14:19 Uhr

Guten Tag!
Ich hab ein selbst erstelltes Diagramm das von einem Panel abgelitten ist, bisher waren die min und max Werte der y-Achse als int gespeichert, zwecks der höheren genauigkeit hab ich das ganze jetzt auf double umgestellt, es funktioniert auch alles schön wies soll, nur wenn ich über den Designer diese min und max Werte verändere läuft das Programm erst schön damit, aber sobald ich wieder in den Designer gehe setzt er nur diese beiden Werte einfach wieder auf die Standardwerte und behält nicht das bei was vorher in InitializeComponet drin stand, es taucht auch noch 2 mal der Error: "At least one element in the source array could not be cast down to the destination array type." auf! Dieser hat leider keine Positionsangabe, ich hab also überhaupt keinen Plan wo das Problem entsteht, habe auch schon vergebens versucht den Designer zu debuggen! Somit bin ich langsam echt ratlos wie ich das Problem noch beheben könnte!
Hoffe mal einer von euch hat ne zündende Idee!

Gruß Muphin

04.12.2006 - 14:01 Uhr

Setz doch mal an der Stelle einen Haltepunkt und schau dann beim Debuggen nach was davon nur eine Null Reference hat, hab grad leider keine Zeit den ganzen Code durchzugehen was es evtl sein könnte!

04.12.2006 - 13:41 Uhr

Aso, ich bin jetzt davon ausgegangen dass du noch ein Setup Projekt hast!
Aber mit den Dateien in dem Zip funzt es leider auch nich, selbes Problem!

04.12.2006 - 13:08 Uhr

Von dem her was du da geschrieben hast schon, kann höchstens sein dass er für irgendwas noch ne extra lib oder dll braucht oder/und du vergessen hast was von den Sachen mit in das Setup reinzupacken!
Ist z.B. das was im setup ordner landet beim build wirklich nur die eine exe Datei?

04.12.2006 - 12:01 Uhr

Also ich habs mir mal gezogen, installieren geht schon mal, habs durch das setup gleich starten lassen und dann popt gleich das Fenster für Just-In-Time Debugging auf!
Exception: System.IO.FileLoadException

Gruß Muphin

04.12.2006 - 10:53 Uhr

Das hat geholfen, dangööö!
Weiss jemand anders noch inwiefern der Entf Key sich da anders verhält dass dieser nicht durch den KeyPress Event abgefangen wurde?

04.12.2006 - 10:01 Uhr

Guten Morgen!
Mir ist gerade aufgefallen dass mein KeyPress Event den druck der Backspace Taste blockiert!


      private void Zahlensuche_KeyPress(object sender, KeyPressEventArgs e)
      {
         if( !( '1' <= e.KeyChar && e.KeyChar <= '9' ) )
         {
            e.Handled = true;
         }
      }

Weiß jemand von euch den entsprechenden Char dafür dass ich den Backspace mit in die if-Abfrage reinnehmen kann?
Und was zum verständnis, kann mir jemand sagen warum die Entf-Taste nicht blockiert wird?

01.12.2006 - 12:14 Uhr

Tja, das war jetzt ne bessere Expertenantwort!

Vielleicht kommst ja damit weiter:


      public struct sTest
      {
         public double ZeitX;    
         public double ZeitY;    
         public double ZeitZ;    
      }
      public struct sMyArray
      {
         sTest[] Zeiten;
         sMyArray( sTest[] sTestArray )
         {
            Zeiten = sTestArray;
         }
      }

Falls du aber einen parameterlosen Konstruktor brauchst musst du ne Klasse nehmen!

01.12.2006 - 12:08 Uhr

Klar geht das 😁

01.12.2006 - 09:51 Uhr

Danke, aber übertreiben muss ichs nich, wäre so halt etwas, sagen wir mal angenehmer gewesen, da ich mich dann, falls mal änderungen an den Arrays anfallen sollten, nicht darum zu kümmern brauche was in der späteren Öffnen funktion steht!

Dankeschön für die Infos!

Gruß Muphin

01.12.2006 - 09:25 Uhr

So ich hab jetzt mal ws funktionierendes zusammengebaut.
Ich hab nur eine kleine Frage fürs deserialisieren
So wie in dem Code funktionierts:


      private void menuItemSpeichernUnter_Click(object sender, System.EventArgs e)
      {
          if( m_fileName != null && m_fileName.Length > 0 )
         {
            saveFileDialog1.FileName = m_fileName;
         }
         if( saveFileDialog1.ShowDialog() == DialogResult.OK) 
         {
            m_fileName = saveFileDialog1.FileName;
            try 
            {
               FileStream a_fs = new FileStream( m_fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None );
                BinaryFormatter a_bf = new BinaryFormatter();
               a_bf.Serialize( a_fs, m_originalZahlen );
               a_bf.Serialize( a_fs, m_zahlenArray );
               a_bf.Serialize( a_fs, m_colors );
               a_fs.Close();
            }
            catch( Exception ex ) 
            {
               MessageBox.Show( ex.Message );
            }
         }

         //Testweise deserialisieren
         for( int i = 0; i < 9; i++ )
         {
            for( int j = 0; j < 9; j++ )
            {
               m_originalZahlen[ i, j ] = 0;
            }
         }

         FileStream a_fileS = new FileStream( m_fileName, FileMode.Open, FileAccess.Read, FileShare.None );
         BinaryFormatter a_binF = new BinaryFormatter();
         m_originalZahlen = (System.Int32[,])a_binF.Deserialize( a_fileS );
         a_fileS.Close();
    }

Nur hätte ich ganz gerne den Cast beim Deserialisieren etwas anders gemacht, z.B. so:


Type typ1 = m_originalZahlen.GetType();
m_originalZahlen = (typ1)a_binF.Deserialize( a_fileS );

Das akzeptiert er auch erst mal, aber beim compilieren sagt er dann:
"The type or namespace name 'typ1' could not be found (are you missing a using directive or an assembly reference?)"
Hab ich da irgend nen denkfehler drin, oder geht das einfach nich so dass ich zur Laufzeit den Typ von m_originalZahlen bestimme und danach dann das entsprechende aus der Datei auslese?

MFG Muphin

30.11.2006 - 11:53 Uhr

nich ganz, aber warn n guter Tipp, dadurch bin ich auf das DashPattern gekommen und damit tuts 🙂 wenn man das DashPattern einstellt wird automatisch der DashStyle auf Custom umgestellt!


            float[] a_dashStyle = new float[] { 3f, 3f };
            this.circlesTolleranzPen.DashPattern = a_dashStyle;

30.11.2006 - 11:04 Uhr

Also ich will einen gestrichelten Kreis zeichnen, nur ist mir der abstand der einzelnen Striche bei der Linienart "Dash" zu klein, also hab ich bissel in der Pen-Klasse rumgesucht und die Property DashOffset gefunden aber wenn ich an der rumspiele ändert sich irgendwie gar nix an der Linie, is das doch für was anderes gut als ich denke und gibts ne einstellmöglichkeit für die "Lückenbreite"?


         this.circlesTolleranzPen = new Pen( colorHellTolleranz, 1 );
         this.circlesTolleranzPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
         this.circlesTolleranzPen.DashOffset = 10f;

30.11.2006 - 08:57 Uhr

Guten morgen!
Ich würde gerne verschiedne Arrays in einer Datei abspeichern und diese dann auch wieder auslesen, mein bisheriger Testcode den ich mir durch viel rumsuchen Zusammengeschnippselt hab sieht so aus:


      private void menuItemSpeichernUnter_Click(object sender, System.EventArgs e)
      {
         if( m_fileName != null && m_fileName.Length > 0 )
         {
            saveFileDialog1.FileName = m_fileName;
         }
         if( saveFileDialog1.ShowDialog() == DialogResult.OK) 
         {
            m_fileName = saveFileDialog1.FileName;
            try 
            {
               FileStream a_fs = new FileStream( m_fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None );
               StreamWriter a_sw = new StreamWriter( a_fs );
               a_sw.WriteLine( m_zahlenArray );
               a_sw.Close();
               a_fs.Close();
            }
            catch( Exception ex ) 
            {
               MessageBox.Show( ex.Message );
            }
         }
      }

wobei m_zahlenArray ein int[,] ist!
Leider konnte ich im Internet oder auch in den Büchern die ich hier hab nichts finden wie man sowas geschickt löst und das was da jetzt in der Datei landet is leider nich so richtig sinnvoll, da steht dann nämlich System.Int32[,]! Außerdem möchte ich noch ein Color[,] abspeichern, falls mir jemand von euch da Tipps oder sogar beispiele dazu hat wäre ich froh!

Gruß Muphin

29.11.2006 - 12:12 Uhr

Tja, wenn ich auf .Net 2.0 wechseln könnte hätte ich das schon gemacht!

Ich habs jetzt auch hinbekommen dass er in das OnPaint reinspringt, aber dann zeichnet er dafür die Nodes gar nicht mehr in den TreeView!
Lässt sich da vielleicht irgendwas machen oder hab ich da so wie ich jetzt vermute mal echt Pech gehabt?

29.11.2006 - 10:37 Uhr

Guten Morgen!
Ich würde gern zu nem TreeView noch sachen dazu Zeichnen, also hab ich ne Klasse von der TreeView Klasse abgeleitet und musste jetzt deprimiert feststellen dass die OnPaint und OnBackground Methoden gar nicht aufgerufen werden, weiß jemand von euch wieso?
Die andere Idee von mir war noch gewesen eine Klasse von TreeNode abzuleiten, da die Sachen die ich dazu zeichnen will immer zu einer Node dazu gehören, aber dort gibts es nicht mal entsprechende Paint Events!
Bitte beachten, ich hab VS 2003 und deshalb gibts bei mir leider auch keine OnDrawNode mit dem ich was anfangen könnte!

29.11.2006 - 10:09 Uhr

Also ich habs hinbekommen, dadurch:

Original von kleines_eichhoernchen

  
Image.FromFile(Application.StartupPath + "\\meinBild.jpg");  
  

hab ich rausgefunden dass er das jpg nicht im Projektordner\bin\Debug sucht sondern in dem Projektordner in dem das Main ist bzw. im Solution Ordner (+\bin\Debug), seit dem das Bild da drin ist Funktioniert auch Image.FromFile("meinBild.jpg");

Dankeschön für die Hilfe!

Weiß aber jemand ob es auch geht das Bild so mit einzubinden dass es in der dll des Unterprojekts landet, so dass der Benutzer später nicht direkt das jpg sieht?

28.11.2006 - 16:49 Uhr

Also ich hab die dateien auch noch mit in obj/Debug und in bin/Debug reingeschmissen aber das hat auch nich geholfen!

Und absolute Pfad emöchte ich eigentlich nicht verwenden, da wenn das Programm portiert wird so gleich Probleme entstehen!

28.11.2006 - 16:28 Uhr

Ich habs so probiert :


(Bitmap)Image.FromFile( "chkboxc.jpg" );

da ich VS 2003 hab gibts das FromImage nicht!
Jetzt sagt er mir File not found, wo muss das denn liegen wenn ers im Projektordner nicht findet?

28.11.2006 - 15:48 Uhr

Also diesmal hab ich ein denk ich mal echt kleines Problem aber ich weiß einfach nich wo es hängt!
Ich hab ne Klasse und nen member Bitmap b, im Konstruktor soll er jetzt der Bitmap Klasse ein jpg übergeben das im Projektordner liegt also so:


public class TcCheckBox : System.Windows.Forms.Control
{

    Bitmap b;

    public TcCheckBox(  )
    {
         b = new Bitmap( "chkboxc.jpg" );
    }
}

beim Konstruktoraufruf kommt allerdings jedesmal die exception:
An unhandled exception of type 'System.ArgumentException' occurred in system.drawing.dll
Additional information: Invalid parameter used.

Kann mir einer von euch sagen was ich da falsch mache?
Durch das Buch das hier vor mir liegt komm ich einfach nich weiter, in den Beispielen scheint das irgendwie kein Problem zu sein!

Edit: Sorry der is im falschen Abteil gelandet!

28.11.2006 - 14:48 Uhr

Versehe die Funktionsparamter doch mal mit nem "ref" wenns dann funktioniert wars wohl nur ne Kopie!

28.11.2006 - 10:33 Uhr

Man kann in einer Datei doch auch einfach sachen anhängen, wenn du jetzt aus jeder Instanz des Programmes immer nur die geöffneten Daten anhängst sollte das doch gehen! Du musst dann eben nur noch überprüfen wieviel in der Datei schon drinsteht und diese ggf. kürzen damit sie nicht einfach immer nur länger wird!

Das is mir jetzt grad mal so kurz eingefallen, vielleicht findest du ja ne gute realisierung dadurch!

28.11.2006 - 10:08 Uhr

Ich hatte angenommen du nimmst das TreeView von Forms und nicht das der Webforms deshalb auch das falsches Kommtar am Ende meines letzten Beitrages für das mich .Kai ja netterweiße verbessert hat!
Schmeiß die system.windows.forms wieder raus und schau mal ob du durch die TreeNodeEventArgs nicht auch durch e.Node oder was ähnliches an die Node rankommst bei der du auf das + geklickt hast!

28.11.2006 - 08:35 Uhr

wenn du mit der wsdl.exe des Framework SDK aus deiner wsdl-Datei eine cs-Datei machen lässt (z.B. C:...\wsdl.exe /o:webclient.cs WebServiceTest.wsdl) kannst du die doch ganz einfach im C# mit in dein Projekt einbinden und diese dann ganz normal verwenden!

28.11.2006 - 08:22 Uhr

zu 1.:
Also ich hab grad das hier ausprobiert:


      private void button1_Click(object sender, System.EventArgs e)
      {
         tcTreeView1.Nodes.Remove( tcTreeView1.SelectedNode );
      }

und es funktioniert einwandfrei, vielleicht liegt der Fehler woanders!

zu2.
Mach das ganze doch mit dem BeforeExpand Event und dann kommst du über e.Node an die Node die geklickt wurde!

Ach und unter GUI-Technologien wäre das Thema besser aufgehoben!

27.11.2006 - 11:35 Uhr

Dankeschön fürs vorsuchen, damit lässt sich vielleicht was anfangen!

27.11.2006 - 11:08 Uhr

Original von arsenic

Original von Muphin
@arsenic
Das hatte ich auch schon gedacht, aber funktioniert leider nicht, bei mir springt er da nach dem KeyDown Event in den TextChanged Event als ob nichts gewesen wäre!

Hast du auch das zweite Beispiel von mir mal probiert mit dem KeyPress Event?

Ja, habs grad reingetippt, und das funktioniert, jetzt würd ich nur mal gern wissen warum!

Weiß einer von euch wie das mit VS 2003 und dem Framework 2.0 is, bei mir ist das 2.0 nämlich doch installiert, hab grad nachgeschaut aber auf die Funktionen kann ich wohl nicht zugreifen!

27.11.2006 - 10:53 Uhr

@arsenic
Das hatte ich auch schon gedacht, aber funktioniert leider nicht, bei mir springt er da nach dem KeyDown Event in den TextChanged Event als ob nichts gewesen wäre!

@Ingo
Weißt du ob das SuppressKeyPress erst ab Framework 2 vorhanden is? Bei mir gibts das nämlich nich!

27.11.2006 - 10:18 Uhr

ja, schon klar, wenn der TextChanged Event dadurch ausgelöst wird is das auch nich schlimm, solang dann nich trotzdem der Buchstabe den ich davor gedrückt hab zu sehen wäre! Wenn ich den Text ändern könnte ohne dass der Changed Event ausgelöst wird wär das in dem Fall auch nich schlecht, aber da kenn ich jetzt auch noch keine möglichkeit!
In dem Feld steht nur eine Zahl, deshalb isses nich schlimm wenn alles weg is!

27.11.2006 - 09:58 Uhr

Also ich hab da jetzt nochmal rumprobiert weil mich das aufblinken der Buchstaben doch noch gestört hat, ich setz jetzt in der TextBox den Text auf "" wenn ein Key gedrückt wird der keine Zahl von 1-9 ist also so:


private void txtBox_KeyDown(object sender, KeyEventArgs e)
{
   if(e.KeyData != Keys.D1 && e.KeyData != Keys.D2 && e.KeyData != Keys.D3 && e.KeyData != Keys.D4 &&
     e.KeyData != Keys.D5 && e.KeyData != Keys.D6 && e.KeyData != Keys.D7 && e.KeyData != Keys.D8 && e.KeyData != Keys.D9)
   {
      ((TextBox)sender).Text = "";
   }
}

aber der Buchstabe blinkt trotzdem noch auf, da er nach dem KeyDown Event noch in den TextChanged event geht!
Lässt sich das irgendwie verhindern dass der TextChanged Event aufgerufen wird wenn der KeyDown event feststellt dass keine Zahl gedrückt wurde?
Oder habt ihr vielleicht noch andere Lösungsvorschläge?

27.11.2006 - 09:52 Uhr

Da bin ich jetzt auch überfragt!

@ JunkyXL
Danke für die Verbesserung, da hattest wohl recht!

27.11.2006 - 09:50 Uhr

Hat keiner ne Idee wie man sowas realisieren kann?

24.11.2006 - 15:43 Uhr

schau mal im debugger nach was der sender ist wenn du auf deinen Knopf drückst und dann caste danach, das da oben war ja nur n Beispiel!

24.11.2006 - 15:27 Uhr

du musst den Sender in das Steuerelement casten von dem es vermutlich kommt, vorher aber bitte mit if Abfragen ob das Steuerelement auch das richtige ist, sonst entstehen logischerweiße exceptions
z.B.:


private void MediaPlayerManager(object sender, _WMPOCXEvents_ClickEvent e)
        {
            if ( sender == Button)
            {
                Button btn = (Button)sender;
                ...
            }
        }