Knuddlbaer schrieb:
Vllt. findest Du ja hier ein paar Ideen dazu:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-246441.html
Bin ich bereits am Mitlesen. Sehr viel hat es mir allerdings noch nicht gebracht, um meine Verwirrung über die Kopie in C# zu beheben. Dafür allerdings ein paar andere interessante Dinge gelernt
Knuddlbaer schrieb:
Eventuell
Effective C# | ISBN: 9780321245663 More Effective C# | ISBN: 9780321485892
Yay! Wer kommt schon auf eine so simple Idee und der Herausgeber ist sogar Scott Meyers, es ist nur ein anderer Autor.
Die kommen definitiv auf die Liste der Kaufobjekte
Grüssli
ARRgggghhh schrieb:
Hey Freaks,
damit ich in Projekt A die Klassen etc. von Projket B verwenden kann, muss ich ja gezwungenermaßen in Projekt A auf die Klassenbibliothek B verweissen.
Nun gibt es anscheinend ne möglichkeit (vom hören sagen) das man die Klassenbibliothek nich explizit verweisen muss, sonder zur laufzeit an A binden kann. geht das? Un welche grund sollte das haben?
Grüße und Guten morgen;)
Das geht. Du kannst zum Beispiel einen eigenen Auflösungsmechanismus implementieren, in dem Du einen event handler für das AppDomain.CurrentDomain.AssemblyResolve-Event implementierst. Dort kannst Du Deine Assembly wie's Dir passt per Assembly.LoadFile(path); laden und zurückgeben.
Grund dafür kann sein, dass Du Deine Applikation zur Laufzeit konfigurieren willst und Assemblies austauschts ohne die Applikation komplett neu zu bauen/ausliefern.
Das kann immer passieren, wenn in nativem Code ungültige Anweisungen ausgeführt oder geschützter Speicher angesprochen wird.
Also bei ActiveX, C(++)-DLLs, oder sogar in der .NET-Runtime könnte das Problem liegen.
Konrad Rudolph schrieb:
Ein häufig verwendeter Weg ist, das Objekt zu serialisieren und danach wieder zu deserialisieren. Total behindert, aber hey. Kopiersemantik wird in den modernen OO-Sprachen einfach nicht für wichtig genug befunden.
Sollte man Clone() also nicht verwenden?
Wie würde eine Clone(Kopie) mit Hilfe von Serialisieren und Deserialisieren aussehen? Könnte mir da jemand etwas Beispielcode posten.
Lg _THE_ONE_
Mit INotifyPropertyChanged:
public partial class MainWindow : Window, INotifyPropertyChanged
{
public MainWindow()
{
InitializeComponent();
Transaktionen = ser.Load();
}
private static ObservableCollecion<Transaktion> transaktionen;
public static ObservableCollection<Transaktion> Transaktionen
{
get { return transaktionen; }
private set
{
transaktionen = value;
RaiseProperyChanged("Transaktionen");
}
}
private void RaisePropertyChanged(string propertyName)
{
if(PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
Da es sich bei Window allerdings sowieso schon um ein DependencyObject handelt kannst du das gleich benutzen:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Transaktionen = ser.Load();
}
public static ObservableCollection<Transaktion> Transaktionen
{
get { return (ObservableCollection<Transaktion>)GetValue(TransaktionenProperty); }
private set { SetValue(TransaktionenProperty, value); }
}
private static readonly DependencyPropertyKey TransaktionenPropertyKey =
DependencyProperty.RegisterReadOnly("Transaktionen", typeof(ObservableCollection<Transaktion>), typeof(MainWindow), new UIPropertyMetadata(null));
public static readonly DependencyProperty TransaktionenProperty = TransaktionenPropertyKey.DependencyProperty;
}
Für das DependencyProperty gibts übrigens im Studio (2008) auch einen schönen vorgefertigten Codeschnipsel.
Eine dritte Variante, die zu dem auch deutlich weniger Code erfordert wäre es Window.DataContext zu benutzen und das Binding der ItemsSource entsprechend umzubiegen.
hustbaer schrieb:
...
p.p.S.: hast du vielleicht ein anderes OS als ich (ich wie gesagt XP Pro SP3)? Das wäre vielleicht noch eine Erklärung... Oder verwendest du evtl. ne andere (neuere) Framework/Studio Version (ich 2.0/2005 SP1).
Jo, ich hab hier ebenfalls WinXP mit SP3, allerdings entwickel ich mit dem VS 2008 und .NET 3.5 Ich werde das mit dem Grid hier mal ausprobieren. Das man da nicht unendlich Daten reinpumpen kann war mir schon klar, aber das der bei 40 Zeilen schon rumeiert Ich werde hier mal eine special investigation starten
EDIT
So, hab den Test gerade durchgeführt:
Gedocktes DataGridView mit DataTable als Datasource. 10.000 Zeilen je 10 Spalten mit Daten. Die einzig spürbare Verzögerung entstand beim Fetching aus der Datenbank (Firebird 2 auf selber Maschine) mit ca 0,5 Sekunden. Jedoch keine Nebeneffekte beim Ändern von Fenster/Spaltengrösse, Maximieren oder was auch immer. Selbst mit Column-Autosize hakt kaum etwas - Erst, wenn ich per Zellengrösse anpassen lasse. Was aber auch verständlich ist, bei 10.000 x 10 Zellen ^^ Version 3.5 scheint da GUI-technisch tatsächlich etwas effizienter zu arbeiten.
Hi Freunde,
danke für die genauen Informationen.
Ok, sowas ähnliches habe ich vermutet, war mir nur nicht abschließend sicher, ob es nicht doch ein Lösung gibt.
Ich habe die Uhr auf der Seite gelassen, sie beschreibt nun allerdings nur noch, wann die Seite zuletzt aktualisiert wurde, und läuft natürlich nicht mit.
Vielen Dank, dass Ihr Euch für mich Zeit genommen habt.
MFG
DanielK.
Hallo!
Würde gerne erkennen ob eine der Pfeiltasten,in meinem UserControl, gedrückt wurde? Leider liefert mir
private void WorkSpace_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show(e.KeyValue.ToString());
}
keine Wert zurück. Scheint so als ob beim drücken der Pfeiltasten kein Event generiert werden würde. Hat vielleicht jemand eine Idee wie ich zu meinen Pfeiltasten komme?
Lg THE_ONE
Der GC arbeitet nicht deterministisch, allerdings betreibt die Runtime einiges an Aufwand (=startet *zumindest* eine volle Collection) bevor sie eine OutOfMemoryException wirft.
----
Das bessere Design ist es meistens, ein neues Objekt zurückzugeben. Ein Objekt zu "recyclen" kann Sinn machen, ist aber eine Optimierung, und wie die meisten Optimierungen meist nicht sehr schön.
Gefunden nicht, aber selbst programmiert!
private bool b_lMousedown=false;
private Point p2_SelectionWindow;
private Point pMousedown;
.
.
.
protected override void OnPaint(PaintEventArgs e)
{
// If there is an image and it has a location,
// paint it when the Form is repainted.
base.OnPaint(e);
Graphics gr = e.Graphics;
if (b_lMousedown)
{
DrawSelectionWindow(gr);
}
}
private void DrawSelectionWindow(Graphics g)
{
Pen myPen = new Pen(System.Drawing.SystemBrushes.WindowFrame);
myPen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
Rectangle rec = new Rectangle(Math.Min(pMousedown.X,p2_SelectionWindow.X),Math.Min(pMousedown.Y,p2_SelectionWindow.Y),Math.Abs(p2_SelectionWindow.X-pMousedown.X),Math.Abs(p2_SelectionWindow.Y-pMousedown.Y));
g.DrawRectangle(myPen, rec);
}
.
.
.
private void WorkSpace_MouseMove(object sender, MouseEventArgs e)
{
if (b_lMousedown)
{
p2_SelectionWindow.X = e.X;
p2_SelectionWindow.Y = e.Y;
}
.
.
.
this.Invalidate();
}
Wenn ich die linke Maustaste drücke setze ich b_lMousedown auf true. Wenn ich die Maustaste wieder loslasse setze ich diese Variable zurück auf false. Damit überprüfe ich eben ob die Maustaste gedrückt ist.
Zusätzlich speichere ich mir die Position der Maus ab zu dem Zeitpunkt wo die linke Maustaste gedrückt wurde - pMousedown.
und die aktuelle Mausposition speichere ich in p2_SelectionWindow
Mit diesen Daten kann man nun ein Rechteck auf den Bildschirm zeichnen, immer dann wenn die Maus bewegt wird.
Wenn jemand Verbesserungsvorschläge hätte, wäre ich sehr dankbar. Über Feedback im Allgemeinen würde ich mich sehr freuen.
Lg THE_ONE
Kannst ja auch was mitlaufen lassen das dir abprüft ob das ereignis noch aktiv ist und falls ja aber es auf den timeout zu läuft wird der spontan mal erhöht
geht ja glaub im nachhinein noch
Hallo Firefighter,
hier ist der aktuelle Code.
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Timers;
public partial class _Default : System.Web.UI.Page
{
public System.Timers.Timer aTimer;
public System.DateTime aktDate;
public void Page_Load(object sender, EventArgs e)
{
aTimer = new System.Timers.Timer(1000);
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
aktDate = DateTime.Now;
LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate);
aTimer.Enabled=true;
}
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
aktDate = DateTime.Now;
LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate);
}
protected void ButtonSiteUpdate_Click(object sender, EventArgs e)
{
}
}
Wenn man den Durchlauf mit Debug macht, und den Code an diese Stelle überwacht:
private void OnTimedEvent(object source, ElapsedEventArgs e)
{
aktDate = DateTime.Now;
LabelAktuelleZeitAnzeige.Text = Convert.ToString(aktDate);
}
Kann man beobachten, dass das Label im Code aktualisiert wird, jedoch nicht auf der Web Site.
Die Uhrzeit auf der Web Site wird erst aktualisiert, wenn die Seite aktualisiert wird. Dieses Ereignis tritt auch dann ein, wenn man den Button anklickt. Das ist zumindest die Erklärung für den Button.
Wie kann ich erreichen, dass die Uhr auf der Web Site weiterläuft, ohne das diese aktualisert werden muss (das Bild flimmert kurz unschön)?
Mit Sicherheit hast Du recht, ich mache bestimmt was falsch, aber was?
Mit C++ Code habe ich sowas ähnliches schon gemacht, daher weis ich das es geht, aber mit C# arbeite ich zum ersten mal. Leider.
Gruß,
DanielK.
Nimlot schrieb:
Die Beiträge 2-3 war ein Faker.
Dann meld Dich gefälligst an.
Nimlot schrieb:
@hajb: Wie mach in so einen Aufruf im Code?
Keine Ahnung, müsste ich selbst ausprobieren. Mach ich nur, wenn Du Dich anmeldest.