2017-07-10 15 views
0

Ich habe 2 Fenster, Register und Benutzerprofil. In Register kann der Benutzer sein Profilbild hochladen und als BLOB in der MySQL-Datenbank speichern. Nach der Benutzeranmeldung kann er alle persönlichen Informationen einschließlich seines Profilbilds aktualisieren.Detect PictureBox Bildwechsel in C#

Dies ist mein Code zu aktualisieren, das Profilbild: erscheint

void UpdateProfileClick(object sender, EventArgs e) 
{ 
    FileStream fs; 
    BinaryReader br; 

    if(usernameUser.Text=="" || passwordUser.Text=="" || namaLengkapUser.Text=="" || tglLahirUser.Text=="" || pekerjaanUser.Text=="" || alamatUser.Text=="" || noHpUser.Text=="" || foto.Image==null) 
    { 
     MessageBox.Show("Data belum lengkap. Isilah semua data anda.", "Register Gagal", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     return; 
    } 

    koneksi.Open(); 

    string FileName = fototext.Text; 
    byte[] ImageData; 
    fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); 
    br = new BinaryReader(fs); 
    ImageData = br.ReadBytes((int)fs.Length); 
    br.Close(); 
    fs.Close(); 

    MySqlCommand cmd = new MySqlCommand("update user set [email protected], [email protected], [email protected]_lahir, [email protected], [email protected], [email protected]_hp, [email protected] where [email protected]", koneksi); 
    cmd.Parameters.AddWithValue(@"nama", namaLengkapUser.Text); 
    cmd.Parameters.AddWithValue(@"password", passwordUser.Text); 
    cmd.Parameters.AddWithValue(@"tanggal_lahir", tglLahirUser.Text); 
    cmd.Parameters.AddWithValue(@"pekerjaan", pekerjaanUser.Text); 
    cmd.Parameters.AddWithValue(@"alamat", alamatUser.Text); 
    cmd.Parameters.AddWithValue(@"no_hp", noHpUser.Text); 
    cmd.Parameters.AddWithValue(@"username", usernameUser.Text); 
    cmd.Parameters.AddWithValue(@"image", ImageData); 

    try{ 
     cmd.ExecuteNonQuery(); 
     MessageBox.Show("Data profil berhasil di-edit.", "Sukses", MessageBoxButtons.OK, MessageBoxIcon.Information); 
     namauser.Text = namaLengkapUser.Text; 
    } 
    catch (MySqlException ex){ 
     MessageBox.Show(ex.ToString()); 
    } 
    koneksi.Close();  
} 

Das Problem ist, wenn der Benutzer aktualisiert ihre Daten aber nicht aktualisiert das Profilbild, ein Fehler auf. Der Benutzer muss also das Profilbild aktualisieren, um den Fehler zu vermeiden.

Also, das ist der Code, der zählt.

string FileName = fototext.Text; 
byte[] ImageData; 
fs = new FileStream(FileName, FileMode.Open, FileAccess.Read); 
br = new BinaryReader(fs); 
ImageData = br.ReadBytes((int)fs.Length); 
br.Close(); 
fs.Close(); 

Ich möchte, dass, wenn PictureBox ‚s Bild ändern, den obigen Code ausführen, sonst den obigen Code ignorieren.

Aber wie mache ich das? Ist es möglich IF Statements zu verwenden?

Vielen Dank.

+0

* "aktualisiert das Profilbild jedoch nicht" * - versuchen Sie, diese Bedingung in * nichtmenschlicher * Weise zu schreiben, z. Ist der Text leer oder wurde auf die Schaltfläche nicht geklickt? – Sinatr

+1

Wenn kein neues Bild geladen wurde - versuchen Sie es nicht zu aktualisieren? – BugFinder

+0

@Sinatr bedeutet, dass das Profilbild vom Benutzer nicht geändert wird. Das Problem ist immer, dass der Benutzer sein Profil aktualisieren will, er muss sein Profilbild ändern. – billyhalim25

Antwort

1

Es sieht so aus, als ob Sie blind Ihre Byte-Daten erstellen. Wenn Sie FileName oder fototext.Text auf Leerheit überprüfen, sollten Sie großartig sein. Zum Beispiel:

if (!string.IsNullOrWhitespace(FileName)) 
{ 
    //do your stuff 
} 

oder wenn Sie wissen, sollte es eine Datei sein, könnten Sie

if (File.Exists(FileName)) 
{ 
    //do your stuff 
} 

Leere oder ungültige Einträge tun wird dann nicht versucht werden. Obwohl Sie wahrscheinlich eine Ausnahme möchten, wenn sie etwas eingeben, aber nicht den richtigen Weg geben. Wenn Sie das überprüfen würden, würde es im Stillen fehlschlagen.

Dies erfordert auch, dass Sie dynamisch das "image" -Bit Ihrer SQL hinzufügen, abhängig davon, ob eine neue Datei angezeigt wurde.

+0

Danke. Es klappt. Können Sie mir sagen, wie Sie das Bild unblindbar in der Datenbank speichern können? – billyhalim25

+1

Sehen Sie sich den String Builder an, der verwendet werden kann, um das SQL, das Sie gerade erstellen, dynamisch zu erstellen, basierend auf derselben Überprüfung, die Sie zuvor durchgeführt haben. Wenn die Überprüfung fehlschlägt, füge das Bit von SQL nicht hinzu, um das Bild einzufügen, füge auch nicht die Bindevariable hinzu, wenn sie nicht geladen wurde. Oder fügen Sie einfach die alten Bilddaten ein (aber das ist die unordentliche und schreckliche Option) – Skintkingle

1

PictureBox hat ein Ereignis BackgroundImageChanged. Sie können mit diesem Ereignis versuchen.

+0

Ich benutze Bild anstelle von Hintergrundbild. Aber ich denke, das ist in meinem Fall dasselbe. Vielen Dank. – billyhalim25

0

Eine Option besteht darin, die Prüfsumme des Originalbildes zurückzugeben und diese mit der Prüfsumme des aktuellen Bildes zu vergleichen. Wenn sich die Prüfsumme geändert hat, hat sich das Bild geändert.