Hallo weiß nicht so ganz obs dir eine hilfe ist, aber du kannst prinzipiell schon eine eigene Windowsmessage verarbeitung aufbauen. In deiner Formularklasse kannst du mit
protected override void WndProc(ref Message m)
{
}
alle events verarbeiten, mit
base.WndProc(ref m);
kannst du diese an die hauptfunktion weitergeben. Such in der msdn nach "Message Struktur" vielleicht kannst du dir ja was zusammen bauen.
mfg Markus
@Preli:
Danke für die info, schade drum....
schönen abend - markus
Hallo du brauchst doch nur die Funktion die ich gepostet habe zu verwenden und für 6 Elemente umzuschreiben, also:
private static void FillListView(ListView ctl, string[] PlatesForSubBatchDisplay)
{
if (PlatesForSubBatchDisplay.Length != 6)
throw new ArgumentException("Das Array muss 6 Werte enthalten");
if (!ctl.Items.ContainsKey(PlatesForSubBatchDisplay[2]))
{
ctl.Items.Add(PlatesForSubBatchDisplay[2], PlatesForSubBatchDisplay[0], -1).SubItems.AddRange(new string[]
{PlatesForSubBatchDisplay[1],
PlatesForSubBatchDisplay[2],
PlatesForSubBatchDisplay[3],
PlatesForSubBatchDisplay[4],
PlatesForSubBatchDisplay[5]});
}
}
diese Funktion kannst du doch als solche verwenden....
mfg Markus
@Preli:
ist das generell auf der TU in Graz so? oder nur bei Softwareentwicklung und Wirtschaft?
mfg Markus
Hallo Jedda,
dasProblem das du hast ist, dass Contains() nicht in subitems sucht. Du kannt das aber umgehen indem du deine Spalte, welche du alsSchlüssel verwenden willst auch der Eigenschaft Key zuweist, hier ein Beispiel mit 2 Spalten die zweite ist mein Unique Key.
private static void FillListView(ListView ctl, string[] PlatesForSubBatchDisplay)
{
if (PlatesForSubBatchDisplay.Length != 2)
throw new ArgumentException("Das Array muss 4 Werte enthalten");
if (!ctl.Items.ContainsKey(PlatesForSubBatchDisplay[1]))
ctl.Items.Add(PlatesForSubBatchDisplay[1], PlatesForSubBatchDisplay[0], -1).SubItems.Add(PlatesForSubBatchDisplay[1]);
}
mfg Markus
Wenn du es fürs Logging verwenden willst und den logger dafür mehr oder weniger selber implemtieren willst, empfehle ich dir PostSharp. Ist ein wirklich gutes Framework was zur AspekOrientierten Programmierung auch zu verwenden ist. Link zu PostSharp. Auf der Seite kannst du es gratis runterladen, ein Video ist ebenfalls auf der webside zu finden in welchem die Mächtigkeit von Postsharp an einem kurzen Beispiel erklärt wird.
mfg Markus
Hallo,
du kannst es über den Stack machen
private void B()
{
System.Diagnostics.StackTrace s = new System.Diagnostics.StackTrace(System.Threading.Thread.CurrentThread, true);
MessageBox.Show("Methode B wurde von Methode " + s.GetFrame(1).GetMethod().Name + " aufgerufen");
}
mir ist nicht bekannt dass der Reflection Namespace im besonderen MethodInfo sowas auch unterstützt.
mfg Markus
Hallo,
um welches Fenster handelt es sich denn? Eines deiner Anwendung oder ein externes? Wenns eines von deine ist ist einfach:
f.Bounds = Screen.PrimaryScreen.Bounds; // f ist dein Form
mfg Markus
Hallo Herbivore,
kannte ich noch nicht 😉
Danke, mfg Markus
Hallo,
das was hier so kryptisch angegeben wird, sind Asciicodes in Hexadezimaler schreibweise.
Und wie robbyrc richtig in Erinnerung hatte ist der Ascii Code 0x20 eben das Leerzeichen sowie 0x5C der Backslash.
Alle codes auf einen Blick unter diesem Link
mit
String s = "C:%5CUsers%5CMax%20Mustermann%5CAppData%5CLocal%5CMicrosoft%5CWindows%20Sidebar%5CGadgets%5C";
s = s.Replace("%5C", "\\").Replace("%20", " ");
würdest du alle Zeichen richtig dargestellt haben.
mfg Markus
Ah, danke Herbivore!
mfg markus
Eine Frage hab ich doch noch...
Wie sieht das dann mit statischen Klassen aus? Wird dann EIN Objekt am Heap angelegt was quasi wie ein Singleton fungiert?
mfg Markus
Hallo,
danke für eure Antworten!
mfg Markus
Hallo,
wie ja bekannt ist wird in dotnet ein Objekt am Heap gespeichert. Wo wird aber die Funktionalität also eigentlich die Klasse selbst als Schablone gespeichert? Liegt die auch am Heap? Ist die üerhaupt zur Laufzeit als solche vorhanden oder stell ich mir das falsch vor?
mfg Markus
Hallo Herbivore,
danke funktioniert super! Eine frage ist jetzt aber noch aufgekommen, ich öffne das assembly:
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.LoadFile(Path_Fitness);
verwende eben mein Feld darin. Leider sagt mir dotnet dass wen ich einen Schreibzugriff auf die Datei (-> Path_Fitness = Pfad) machen möchte, bekomme ich die Meldung, dass diese bereits geöffnet ist. Wie schliese ich diese wieder? hab schon versucht einen Usingblock darüber zu legen, leider implemetiert die Klasse assembly IDispose nicht...
mfg Markus
Guten Morgen,
ich hab in keiner Anwendung bisher 1000(!) Controls gebraucht! Was willst du denn machen? Vielleicht solltest du dir das Design nochmal überlegen.
mfg Markus
Guten Morgen,
ich komm nicht weiter! Ich compiliere zur Laufzeit eine von mir definierte statische Klasse welche eine anonyme Function als öffentliches globales sttaisches feld beherbergt. Das funktioniert auch so weit, habs mir mit LR's Reflector angeschaut, Klasse wird erstellt und Feld auch.
Wie kann ich nun auf dieses Assembly zur Laufzeit zugreifen? Ich habs mal mit Reflexion versucht:
System.Reflection.Assembly myAssembly = System.Reflection.Assembly.LoadFile(PATH);
Damit wird dasAssembly richtig geladen, danach versuchte ich mit
myAssembly.GetType().GetMembers();
mein Feld auszulesen - war dabei.
Leider stehe ich jetzt an! Wie kann ich einer zur designzeit erstellten Methode welche einen delegate erwarten, diesen aus diesem Assembly übergeben?
mfg Markus
Wie Golo sagte ist das sicher am schnellsten, allerdings muss die Liste dafür sortiert vorliegen.
mfg Markus
Hallo,
was hast du denn für ausgangspunkt? weißt du von welcher position das foto (?) geschossen wurde oder kennst du andere markante punkte auf die man rück rechnen könnte?
Brauchte das auch mal, orientoerte mich dabei an diesem Projekt:
Hier
Da gehts um eine Nintento wii mit welcher eine IR Led getrackt wird um so einen Touchscreen nachzubilden, vielleicht hilfts ja.
mfg Markus
Der umgekehrte Weg geht nicht, da du dafür Änderungen am Typ int vornehmen müsstest was aber nicht möglich ist.
Das ist falsch, der implizite cast kann natürlich auch in die andere Richtung geschrieben werden:
public struct MyStruct
{
int intern;
public MyStruct(int val)
{
intern = val;
}
public static implicit operator MyStruct(int val)
{
return new MyStruct(val);
}
public static implicit operator int(MyStruct val)
{
return val.intern;
}
}
sowie auch der explizite dazu musst du nur dass schlüsselwort implicit auf explicit ändern.
mfg Markus
Hallo,
DataRowView reihe = (DataRowView)this.bELEGEBindingSource.CurrencyManager.Current;
checkBox1.Visible = !Convert.ToBoolean(reihe["abgeschlossen"]
mfg Markus
Hallo,
lade dir "Lutz Roeder's Reflector" runter. Ist ein gutes Tool u.a. auch zur Codeanalyse. Wenn du es geladen und gestartet hast kannst du dir alle Funktionen im Detail betrachten. Natürlich sind diese funktionen aber nur bis zu einer gewissen Grenze mit diesem System nachvollziehbar da da nur das Abstraktionslevel auf C# Basis ansehen kannst und keinen assemle code bekommst. In einigen fällen werden auch native dlls verwendet bzw. api aufrufe.
mfg Markus
Hallo,
ja die Erklärung hört sich plausibel an!
Damit läge doch aber auch die Lösung deines Problems auf der Hand. Du implementierst es in jeder Klasse statisch von Hand! Da du wie in deinem vorherigen Posting gesagt den Aspekt der Polymorphie ohnehin dadurch nicht nutzen kannst bringts dir eh nichts wenns abstrakt in der Basisklasse definiert ist...
Oder die zweite Möglichkeit wäre eben die Instanzeigenschaft.
mfg Markus
Hallo golo,
würde mich auch interessieren, hab grad mal gegoogelt... komischerweise findet man in fülle nur die information dass abstract methoden ja implizit virtual methoden sind und dass man diese nun mal nicht static machen kann da virtual eine instanzierung benötigt. Ich weiß die info ist nicht grad befriedigend...
Hab nur gelesen das sowohl Java als auch dotnet dieses feature nicht unterstützen.
poste bitte falls du eine Lösung hast.
mfg Markus
Hallo Mike001,
dein Konzept weist noch ein paar mängel auf:
1.) Wofür üerhaupt dieser String arr? Ich glaube zu wissen dass du bisher C programmiert hast wo man ja korreter weise einen string als char array anlegt. in c# ist dieses char array aer schon der typ string. du brauchst also nicht noch ein array vom typen string anlegen. Nimm doch für die Abfrage gleich das Argument "code"
2.) Mir ist nicht ganz klar wie du das mit den anführungszeichen so losen willst, denn es gibt auch folgenden korrekten fall welcher eine ungerade anzahl von dopplehochkomma zulässt:
printf ( "Ein \" gibt es auch in Zeichenketten" );
3.) Die Idee alle Klammern global zusammenzusetzen ist auch keine Lösung, denn dieser Fall wäre nach deinem Programm her korrekt:
int i;
i = 5 * (2 + 3; // Hier fehlt die geschlossene Klammer!!!
i += 2 * 1 + 2); // und hier die offene!!!
4.) Deine Idee die Kommentare abzufangen wird nicht funktionieren denn mit der zweiten abfrage (arr[i + 1] == "/")) wirst du einen Laufzeitfehler erzeugen, da im Array "arr" am Index i+1 noch nicht einmal ein Zeichen steht.
Es kommt natürlich auch an was du jetzt wirklich proggen willst? willst du wissen wo sich der Fehler also in welcher Zeile sich dieser befindet oder "nur" ob es syntaktisch korrekt ist?
Mein Ansätze so etwas zu erstellen wären:
Ersetze alle " mithilfe der String.Replace Methode mit nichts, dadurch verschwinden diese mal.
Splitte dir deinen Code in Zeilen als Trennzeichen nimmst du den Strichpunkt. (Die Möglichkeit das ein Strichpunkt in einem string steht hab ich nicht miteinbezogen)
Jetzt hast du ein string array / liste (<- besser) wo in jedem element eine C-Code Zeile steht. Jetzt macht es auch Sinn deine Idee zu verwenden und zu überprüfen wieviele Klammern PRO ZEILE stehen und ob die Anzahl der anderen einschliesenden Operatoren korrekt ist.
Abschliesend muss ich aber trotzdem sagen, dass das für dich als einsteiger in c# ein sehr hoch gestecktes ziel ist. Ich empfehle dir dich zuvor wirklich gut mit der Sprache und den Möglichkeiten des dotnet frameworks auseinander zusetzen. Es gibt einige Funktionen die dir beim Lösen dieser Aufgabe behilflich sein dürften (Stichwort String - Klasse). Es gibt auch durchaus Online Bücher welche gratis zum Download mit Link auf dieser Seite zu finden sind (Linkes Hauptmenü / Ressourcen / openbook (Visual) C#).
mfg Markus
Hallo,
dein Formatstring muss so aussehen:
"{0:D2}:{1:D2}:{2:D2}"
mfg Markus
Hier war vor kurzem ein thread zu dem Thema
mfg Markus
siehe auch MSDN,
damit kannst du wie in C mit dem "..." beliebig viele argumente aber vom gleichem Typ an eine Methode übergeben!
Bsp:
public static void PrintStringsToMessageBox(params string[] list)
{
for each (string s in list)
MessageBox.Show(s);
}
public static void Main()
{
PrintStringsToMessageBox("Hallo", "mycsharp", "test123", "567");
}
mfg Markus
EDIT: param ist für die XML Doku und params ist das Schlüsselwort zur Parameter übergabe
Hallo,
public static void FillListWithPortNames(ComboBox lc)
{
lc.Items.AddRange(System.IO.Ports.SerialPort.GetPortNames());
}
mfg Markus
Schade, aber danke für eure ideen und kommentare
mfg MArkus
Danke, manchmal sieht man den Wald vor lauter Bäumen nicht.
mfg Markus
Hallo nochmal,
kann mir jemand sagen warum das bei vererbung funktioniert:
class Sum
{
public virtual long sum() { return 0; }
}
class numbers : Sum
{
public int a=2;
public int b=4;
public override long sum()
{
return a + b;
}
}
class mainclass
{
public void foo()
{
numbers n = new numbers();
long b = n.sum();
}
}
aber bei einem interface nicht????
interface ISum
{
long sum();
}
class numbers : ISum
{
public int a=2;
public int b=4;
long ISum.sum()
{
return a + b;
}
}
class mainclass
{
public void foo()
{
numbers n = new numbers();
long b = n.sum();
}
}
wie könnte ich das erste bsp. mit interfaces lösen?
mf Markus
hallo,
ich hab eine klasse winkel geschrieben wo ich den wert im konstruktor übergeben kann zusätzlich muss man angeben ob es sich um grad oder um radiant handelt. also:
Angle a = new Angle(45, Angle.TypeOfAngle.Degree);
ich will aber das sowas möglich ist:
Angle a = 45°;
Hab zwar im moment einen impliziten cast operator von double auf meine winkel klasse üerladen und den wert immer als grad interpretiert aber schöner wärs eben anders.
Ich denk mir dass es doch gehen muss da der compiler ja 4f auch als einen float wert erkennt...
wär schön wenn wer eine antwort weiß wie ich sowas ewerkstellige.
mfg Markus
Wenn du das Array von Hinten nach Vorne durchgehst kannst dir sogar die Prüfung
ob irgendwas drinnen steht oder die PLZ kleiner als das kleinste(erste) Element ist sparen...
private int GetSonnentage(int PLZ, int[,] array)
{
for (int i = array.GetLength(0) - 1; i >= 0; i--)
if (array[i,0] <= PLZ) return array[i,1];
return -1;
}
mfg Markus
Kostet etwa 4cm Decken höhe und etwa 25€ je nach Raum größe
Na das mit 25€ glaub ich ja nicht... Denn die Platten alleine sinds ja noch nicht, komt noch verspachteln und mahlen/verputzen. Und wenn dir nötige Ressource fehlen kannste auch noch von extern wen oder was dazukaufen.
Für was brauchst du es denn? Falls es für ein Schlafzimmer ist, besteht ja durchaus die Möglichkeit die Steren zu projezieren. Wenn du das aber für was professionelles brauchst a la eine Bar würde ich ebenso die Decke abhängen da du wohl möglich auf dauer nicht mit einer "Discokugel" zu frieden sein wirst.
mfg
this.Text = "hallo";
mfg
PS: nimm dir Programmierhans' rat zu herzen, gibt gute openbooks, link auf dieser seite.
ich werd mir das am abend mal ansehen...
danke, mfg
Danke für die weitere Unterstützung. Hier mein praktisches Beispiel welches ich verstehen will Hier
mfg Markus
Danke für die reichlichen Anregeungen in meinem letzten ThreadHier. Bin auf dieses Thema gekommen als ich mich unter anderem mit Aspekt Orientierter Programmierung beschäftigte. Ich verwende dazu die PostSharp Komponente, mitwelcher ich z.B. einen Pointcut definieren kann durch setzen eines Attributes für die Klasse/Methode/...
Wie funktioniert das?
Wie kann ein Attribut den kompletten Programverlauf mit Aspekt Orientierten Mitteln versehen? Wie entsteht dieses Generat?
mfg Markus
Danke euch beiden!
mf Markus
Guten Morgen,
will mich gerade ein wenig mit Attributen beschäftigen, verstehe mittlerweile wie der Syntax aussieht und wie man sie imlementiert. Mein Frage nur, wozu?
Kann mir jemand ein praktisches Beispiel nennen wann ihr sowas gebraucht habt?
(Nicht die Anwendung, das wäre ja eh unter anderem serialisierung, sondern die Verwendung von Custom Attributes)
mfg Markus
Hallo,
du hast den fehler höchstwahrscheinlich daher, da du deine variable pause nicht instanziert hast. Also:
DateTime pause = new DateTime();
Ebenso würd ich den Code-Teil gerne in eine Art Procedure (nennt sich so in Delphi) machen, doch ich weiß nicht wie sich das in C# nennt. unglücklich Vielleicht kann mir da jemand weiter helfen.
Als letztes würde ich gerne während der Laufzeit von der Form die Eigenschaft ändern, heißt dass ich dort eine Zeitanzeige machen möchte, doch ich kann die Eigenschaft scheinbar nicht so einfach ändern wie bei einem Label, wie kann ich das dort machen?
Diese beiden Fragen sind so trivial, dass ich dich darauf hinweisen muss, dass es gute openbooks gibt in welchen du c# lernen kannst.
Siehe auch [Hinweis] Wie poste ich richtig? unter Punkt 1.1.[1]
Hallo,
warum speicherst du denn nicht gleich deinen Wert als Key in den Setting ab? Falls du die Konvertierung trotzdem brauchst:
Keys k = (Keys)Enum.Parse(typeof(Keys), "Hier steht dein String";
mfg Markus
Hallo Golo,
weiß nicht obs eine elegante Lösung ist aber du könntest ein Dictonairy erstellen in dem du einerseits die Exception als Schlüssel verwendest und als wert ein array mit 2 elementen wobei eines angibt ob die exception geworfen werden soll und das 2te eben deinen text welcher zurückgegeben wird.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Dictionary< Type, Werte> ex_dict = new Dictionary<Type, Werte>();
ex_dict.Add(typeof(ExceptionA), new Werte(true, "Foo"));
ex_dict.Add(typeof(ExceptionB), new Werte(false, "Bar"));
try
{
throw new ExceptionA();
}
catch (Exception ex)
{
Werte w = ex_dict[ex.GetType()];
if (w.Auswerfen)
throw;
else
return w.Text;
}
}
}
class Werte
{
public bool Auswerfen;
public string Text;
public Werte(bool auswerfen, string text)
{
this.Auswerfen = auswerfen;
this.Text = text;
}
}
class ExceptionA : Exception
{
}
class ExceptionB : Exception
{
}
}
mfg Markus
Hallo,
meinst du die besonderheit dass die variable "abort" in beiden threads zugänglich ist? falls es das ist weis ich aber trotzdem nicht wie das feature heißt...
mfg Markus
Das versteh ihc nicht, bei mir ändert sich der text sowie ich mit meinem element über einem neuen item bin. wobei die scanfläche meiner itemgröße entspricht.
Zum testen verwendete ich dia listviewansicht LIST und als dragobjekt eine verknüpfung vom desktop.
mfg Markus
Du kannst vielleicht vorher den Hashcode der Liste abfragen und nachher auch - und wenn der nicht leich ist...
mfg Markus
Ich korrigier dich 😉
private void listView4DragOver(object sender, DragEventArgs e)
{
PDragOver = 3;
try
{
Point ClientKoo = this.listView4.PointToClient(Cursor.Position);
ListViewItem selection = listView4.GetItemAt(ClientKoo.X, ClientKoo.Y);
string ItemName = selection.Name;
groupBox2.Text = ItemName;
}
catch
{
}
}
mfg Markus