naja, du könntest das ganze ding auch irgendwie verschlüsseln. schau doch mal in diesem namespace nach
System.Security.Crypthography
du könntest zb. das Passwort gehasht in deiner db. ablegen und wenn der user sich dann wieder anmeldet die daten hashen und mit dem gehashtem wert in der db vergleichen.
das geht zb. mit der Klasse System.Security.Crypthography.Sha512 zb.
edit: ich mache dich auch nochmal auf http://msdn2.microsoft.com/de-de/library/system.security.securestring(VS.80).aspx aufmerksam
Benutz den XMLSerialiser, das selbr zu machen würde nur zu einer Lösung führen die recht begrenzt auf dein Fall ist und schwierig zu erweitern ist.
Schau dir dazu mal http://www.topxml.com/xmlserializer/ an, da steht alles dazu wie du mit dem XMLSerializier wirklich effektiv arbeitest und wie du damit auch die Struktur bestimmen kannst vom XML was raus kommt.
so nachdem ich ein paar mal aus dem fenster gehüpft bin habe ich nun diesen code
static string getSerial(string driveletter)
{
ManagementObjectSearcher obs = new ManagementObjectSearcher
("root\\cimv2:Win32_LogicalDisk",
"ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" + driveletter + "'} WHERE AssocClass = Win32_LogicalDiskToPartition");
obs.Options.ReturnImmediately = true;
ManagementObjectCollection.ManagementObjectEnumerator Enumerator = obs.Get().GetEnumerator();
Enumerator.MoveNext();
ManagementObject o = (ManagementObject) Enumerator.Current;
obs.Query = new ObjectQuery
("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" + o["DeviceID"] + "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition");
obs.Scope = new ManagementScope("root\\cimv2:Win32_DiskPartition");
Enumerator = obs.Get().GetEnumerator();
Enumerator.MoveNext();
return (((ManagementObject)Enumerator.Current)["SerialNumber"]).ToString(); //hier gibts die exception, mit Manafacturer funzt es zb.
}
der wohl unter Vista funzt aber nicht unter WinXp.
2 Fragen:
1. Warum geht das nicht unter WinXp? Das ist der Text der Exception:
Eine nicht behandelte Ausnahme des Typs "System.Management.ManagementException" ist in System.Management.dll aufgetreten.
Zusätzliche Informationen: Nicht gefunden
2. Wie bekomm ich das schneller? Der geht wohl alle Laufwerke durch oder so, denn ich höre mein FloppyLaufwerk knattern..Wie kann ich es unterbinden, das er auch FloppysCheckt?
Danke
XaTrIxX schrieb:
okay: hab's, wenns jetzt aber um die Systemsteuerung geht, wie geht das denn, da greift die Rundll ja auf die Shell zu, trotzdem funktioniert folgendes nicht:
System.Diagnostics.Process.Start("RUNDLL32 Shell32,Control_RunDLL");
Argumente übergibt man nicht direkt sondern über eine StartInfo. Also: erstell ein StartInfo-Objekt, füll es mit dem Prozessnamen und den Parametern und übergib es der 'Start'-Methode. In der MSDN steht mehr dazu und Beispiele gibt's auch:
http://msdn2.microsoft.com/en-us/library/system.diagnostics.process.aspx
Verwende doch einfach ints. Dann kannst shiften wie du willst, und zum schluss einmal das gewünschte Byte rausmaskieren und fertig. byte als Datentyp zu benutzen ist unter .net eh suboptimal.
Der Sinn eines Labels besteht darin einen beschreibenden Text zu einem Control darzustellen, es ist also keine Textausgabe per se... Daher falsches Control.
Für Textausgaben gibt es die TextBox (daher auch der Name TextBox). Wenn sie für reine Ausgaben benutzt werden soll schaltet man sie halt auf Readonly.
Das ist nur ein Teil des ganzen:
http://homepage.mac.com/bradster/iarchitect/shame.htm
Zum Teil ist das etwas veraltet, ein wenig subjektiv, aber allgemein IMHO noch zum großen Teil zutreffend.
Ist es möglich in einer .net Anwendung Eingaben von einer bestimmten Tastatur(wenn mehrere angesteckt sind) zu empfangen. Diese Eingaben dürfen aber nur zu dieser eine Anwendung gelangen(auch wenn sie nicht den Focus hat).
mein problem ist nun folgendes:
ich hab z.b. 14 datensätze.
d.h ich muss in meinem panel dann 14 zusätzliche zeilen hinzufügen.
und den code im designer kann ich ja nicht ändern.
also muss ich das irgendwo in meinem programm machen.
Nur wie?
bis jetz siehts halt so aus.
public partial class Form1 : Form
{
TableLayoutPanelGrowStyle tblGrowStyle;
public Form1()
{
InitializeComponent();
tblGrowStyle = this.tableLayoutPanel1.GrowStyle;
}
private void b_datei_einlesen_Click(object sender, EventArgs e)
{
openFileDialog1.ShowDialog();
}
private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
this.Activate();
string Filename = openFileDialog1.FileName;
datei_auswerten(Filename);
}
private void datei_auswerten(string dateipfad)
{
FileInfo theSourceFile = new FileInfo(dateipfad);
StreamReader reader = theSourceFile.OpenText();
string strline;
int anzahl = 0;
while ((strline = reader.ReadLine()) != null)
{
if (strline.Contains(@"projekt value"))
{
anzahl++;
}
}
formaufbau(anzahl);
}
private void formaufbau(int zahl)
{
for (int i = 0; i < zahl; i++)
tblGrowStyle = TableLayoutPanelGrowStyle.AddRows;
}
}
Nimm dir ne Variable bool keypressed_w=false;
...setz die bei KeyDown auf true und bei KeyUp wieder auf false.
Das eigentliche Zeichnen dann z.B. via Timer machen...
...und wenn das auch noch zu ruckelig ist, schau mal bei den Spieleprogrammierern hier vorbei
C# Beginner schrieb:
1. Laut meinem Compiler kann man keine parameterlosen Kosntruktoren für Strukturen erstellen. Komischerweise hab ich aber ein Buch "C# lernen" worin genau dies gemacht wird.
Oh, schlechtes Buch. Das geht nämlich wirklich nicht, und zwar, um große Mengen von Strukturen effizient initialisieren zu können. In Deinem Beispiel kann der Compiler z.B. ein großes Array ('new AAA[1000]') einfach dadurch initialisieren, dass er über den gesamten Speicherblock Nullen schreibt. Das ginge nicht, wenn er für jedes Element einen Konstruktor aufrufen müsste.
dmt schrieb:
hi,
ich habe mir dazu eine eigene klasse MyListView geschrieben die von ListView erbt geschrieben:
public class MyListView : ListView
in dieser fange ich das doppelklicken ab:
protected override void OnDoubleClick(EventArgs Ea)
Warum eigendliche eine eigene Klasse ableiten? (oder gibt es noch andere Gründe dafür? ausser dem hier besprochenen?
Du könntest das doch auch so machen, dann hast Du das Problem mit dem Zugriff auf die Combobox gar nicht.
partial class YourForm : Form
{
ComboBox box = new ComboBox()
ListView lv = new Listview();
public YourForm()
{
InitializeComponents()
lv.MouseDoubleClick += new MouseEventHandler(lv_MouseDoubleClick);
}
void lv_MouseDoubleClick(object sender, MouseEventArgs e)
{
// Nur der Vollstöändigkeit halber, in dem Beispiel ist listview == lv
ListView listview = sender as ListView;
box.Items.Add(listview.SelectItem);
}
Ich vermute, Du arbeitest ohne Backbuffer und das ist natürlich katastrophal für die Anzeige. Also: Leg Dir ein Bitmap an, welches den Hintergrund enthält und eines, welches das eigentliche Bild enthält. In jedem Zeichendurchgang zeichnest Du zuerst den Hintergrund ins Bild und dann die Figuren drüber. Ganz zum Schluss rufst Du dann die Invalidate-Methode der Picturebox auf und im Paint-Event der Picturebox zeichnest Du einfach Dein fertiges Bild auf die Hintergrundfläche. So ist der übliche GDI+-Weg.
ein property ist genau das was du mit radius gemacht hast
public double Flaeche
{
get
{
return radius * radius * Math.PI;
}
}
1stes google ergebnis, hf :p
http://ag-kastens.uni-paderborn.de/lehre/material/csharp/Properties.pdf