Würfel-Grafik ändern



  • Hi 🙂
    Ich probiere grade mit C# es hinzubekommen, dass wenn man auf einem Buttom drückt, dass man eine zahl zwischen 1-6 bekommt und die dazugehörige Würfel-Grafik angezeigt wird.(Genaugenommen 2 aba, wenn man eins hat, hat man ja auch das andere automatisch 😃 )

    private void würfeln_Click(object sender, System.EventArgs e)
    {
    Random wu1, wu2;
    int w1,w2;
    wu1= new Random();
    wu2= new Random();
    w1= wu1.Next(6);
    w2= wu2.Next(6);
    switch(w1)
    {
    case 1:
    Wuerfel1.Image=System.Drawing.Bitmap.FromFile("w1.gif");
    break;
    case 2:
    Wuerfel1.Image=System.Drawing.Bitmap.FromFile("w2.gif");
    break;
    case 3:
    Wuerfel1.Image=System.Drawing.Bitmap.FromFile("w3.gif");
    break;
    case 4:
    Wuerfel1.Image=System.Drawing.Bitmap.FromFile("w4.gif");
    break;
    case 5:
    Wuerfel1.Image=System.Drawing.Bitmap.FromFile("w5.gif");
    break;
    case 6:
    Wuerfel1.Image=System.Drawing.Bitmap.FromFile("w6.gif");
    break;
    }
    }

    nun will es jedoch nich, warum? 😮
    ich hab mir jetz die befehle eigentlich nur dahergereimt und bin schon fro, soweit zu kommen 😵
    w1.gif - w6.gif hab ich in mein project als ressourcen eingebunden.

    Bitte um Hilfe 😞



  • Servus,

    du könntest das so machen:

    using System.Reflection;
    .
    .
    
    Assembly assembly = this.GetType().Assembly;
    Wuerfel1.Image = new Bitmap(assembly.GetManifestResourceStream("DeinProjekt.w6.gif")) as Image;
    

    mfg
    Hellsgore



  • hmm... leiter funktioniert das nich ;_;

    Wuerfel1.Image = new Bitmap(assembly.GetManifestResourceStream("\\Bilder\\w1.gif")) as Image;
    

    so hab ich es jetz probiert UND

    Wuerfel1.Image = new Bitmap(assembly.GetManifestResourceStream("Monopoly.Bilder.w1.gif")) as Image;
    

    Es kommt diese Bemerkung:

    Informationen über das Aufrufen von JIT-Debuggen
    finden Sie am Ende dieser Meldung, anstatt in diesem Dialogfeld.

    ************** Ausnametext **************
    System.ArgumentException: 'null' ist kein gültiger Wert für 'stream'.
    at System.Drawing.Bitmap..ctor(Stream stream)
    at Spiel.Spielbrett.würfeln_Click(Object sender, EventArgs e) in d:\projekte\monopoly\spielbrett.cs:line 192
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Geladene Assemblys **************
    mscorlib
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
    ----------------------------------------
    Monopoly
    Assembly-Version: 1.0.2138.31943
    Win32-Version: 1.0.2138.31943
    CodeBase: file:///D:/Projekte/Monopoly/bin/Debug/Monopoly.exe
    ----------------------------------------
    System.Windows.Forms
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
    ----------------------------------------
    System
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
    ----------------------------------------
    System.Drawing
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
    ----------------------------------------
    System.Xml
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.2032
    CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
    ----------------------------------------
    System.Drawing.resources
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.573
    CodeBase: file:///c:/windows/assembly/gac/system.drawing.resources/1.0.5000.0_de_b03f5f7f11d50a3a/system.drawing.resources.dll
    ----------------------------------------
    System.Windows.Forms.resources
    Assembly-Version: 1.0.5000.0
    Win32-Version: 1.1.4322.573
    CodeBase: file:///c:/windows/assembly/gac/system.windows.forms.resources/1.0.5000.0_de_b77a5c561934e089/system.windows.forms.resources.dll
    ----------------------------------------

    ************** JIT-Debuggen **************
    Um das JIT-Debuggen (Just-In-Time) zu aktivieren, muss in der
    Konfigurationsdatei der Anwendung oder des Computers
    (machine.config) der jitDebugging-Wert im Abschnitt system.windows.forms festgelegt werden.
    Die Anwendung muss mit aktiviertem Debuggen kompiliert werden.

    Zum Beispiel:

    <configuration>
    <system.windows.forms jitDebugging="true" />
    </configuration>

    Wenn das JIT-Debuggen aktiviert ist, werden alle nicht behandelten
    Ausnahmen an den JIT-Debugger gesendet, der auf dem
    Computer registriert ist, und nicht von diesem Dialogfeld behandelt.



  • TEILERFOLG 😵

    pictureBox1.Image = ((System.Drawing.Image)(Image.FromFile("C:\\Bild.jpg")));
    

    (hab dafür ein extra testprojekt gemacht)
    Das Funktioniert schonmal 🙂 jetzt kommt die frage:
    wie kann ich die in der Projektmappe vorhandenen Bilder benutzen?

    edit:
    Werden die Bilder in der exe mit kompiliert, die in den forms zu sehen sind?



  • Servus,

    kleiner Crashkurs:

    Du siehst dei Bilder jetzt im >>> SolutionExplorer <<<

    Monopoly
    |- Form1.cs
    |- Assembly.cs
    |- Bla.cs
    |- Bilder
       |- w1.gif
       |- w2.gif
       |- w3.gif
    

    liegen die Bilder in einem Unterordner mußt du den mit angeben.

    Wuerfel1.Image = new Bitmap(assembly.GetManifestResourceStream("Monopoly.Bilder.w1.gif")) as Image;
    

    Alle Bilder die du dem Projekt hinzugefügt hast müssen in ihrer Eigenschaft "Build Action" den Wert "Embedded Resource" aufweisen. d.h. Du klickst auf deine Bilddatei im SolutionExplorer mit der rechten Maustaste und wählst Properties aus. Den Eintrag "Build Action" wie oben beschrieben ändern.

    Wenn du damit nicht zurecht kommst, dann schaue dir mal mit

    Assembly assembly = this.GetType().Assembly;
    string assemblyName = assembly.GetName().Name;
    

    den Namen an und füge ihn einfach dem ResourceString hinzu:

    Wuerfel1.Image = new Bitmap(assembly.GetManifestResourceStream(assemblyName + ".Bilder.w1.gif")) as Image;
    

    mfg
    Hellsgore



  • Warum lädst du die Bilder bei jedem Mausklick neu? Das ist IMHO ineffizient. Normalerweise läd man Bitmap-Ressourcen nur einmal und zeigt sie dann je nach Situation an.



  • Übrigens: der Zahlenbereich bein Random.Next(6) geht nicht von 1 bis 6, sondern von 0 bis 5.



  • danke erstmal 🙂
    1. da is n knopf zum würfeln. ok, man hätte auch so machen können, dass die images übereinander lagern und dann je nach bedarf alle bis auf den nötigen unsichtbar machen, aba so gefällt es mir eher 😉
    2. ja, danke 🙂

    so....
    danke, es hat funktioniert ____


Anmelden zum Antworten