Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C++CLI / VB .Net / .Net-Framework » Swing-klassen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
12.12.2002, 16:05 Uhr
e-Caf|Y|baB



Hallo,
gibt es bei C# oder einer anderen .NET-Sprache eigentlich sowas wie die Java Swing Klassen, also eine plattformunabhängige grafische Benutzeroberfläche?
MfG e-Caf
--
There are 10 types of people - those who understand binary and those who
don't.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
12.12.2002, 21:04 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Jepp, die gibt es. Das .NET-Framework enthält unter dem Namespace System.Windows.Forms einen Haufen Komponenten, die praktisch die gesamte Funktionalität der Windows-Oberfläche kapseln (und noch ein paar Extras bieten). Das Mono-Projekt für Linux arbeitet gerade daran, diese Komponenten unter Linux verfügbar zu machen.
Einen direkten Vergleich zu den Swing-Klassen kann man hier aber nicht ziehen, da Swing die Steuerelemente selbst zeichnet, während bei .NET das Betriebssystem dafür verantwortlich ist. Die Komponenten haben also zwar die selbe Funktionalität, passen sich aber im Aussehen an das jeweilige Betriebssystem an und werden schneller gezeichnet.

Hier mal ein einfaches Beispiel mit einem Fenster, einem Menü und ein paar Buttons:


C++:
using System;
using System.Drawing;
using System.Windows.Forms;

public class Form1: Form
{

//##############################################################################

   // Sichtbare Kontrollelemente
   private MainMenu mainMenu1;
   private MenuItem menuItem1;
   private MenuItem menuItem2;
   private MenuItem menuItem3;
   private Button[] baButtons = new Button[9];

   private int[,] ciWinningConsts = {
      {1, 0, 0, 1, 0, 0, 1, 0, 0},
      {0, 1, 0, 0, 1, 0, 0, 1, 0},
      {0, 0, 1, 0, 0, 1, 0, 0, 1},
      {1, 1, 1, 0, 0, 0, 0, 0, 0},
      {0, 0, 0, 1, 1, 1, 0, 0, 0},
      {0, 0, 0, 0, 0, 0, 1, 1, 1},
      {1, 0, 0, 0, 1, 0, 0, 0, 1},
      {0, 0, 1, 0, 1, 0, 1, 0, 0}};

   private Random rnd = new Random();

//##############################################################################

   public Form1()
   {
      SuspendLayout();

      // Menü zusammenstellen
      mainMenu1 = new MainMenu();
      menuItem1 = new MenuItem();
      menuItem2 = new MenuItem();
      menuItem3 = new MenuItem();
      mainMenu1.MenuItems.AddRange(new MenuItem[] {menuItem1});
      menuItem1.MenuItems.AddRange(new MenuItem[] {menuItem2, menuItem3});
      menuItem2.Shortcut = Shortcut.F2;
      menuItem1.Text = "Game";
      menuItem2.Text = "New";
      menuItem3.Text = "Close";
      menuItem2.Click += new EventHandler(MenuNeuClick);
      menuItem3.Click += new EventHandler(MenuCloseClick);

      // Buttons erstellen und verteilen
      Font aFont = new Font("Microsoft Sans Serif", 24F, FontStyle.Bold);
      Size aSize = new Size(50, 50);
      EventHandler aHandler = new EventHandler(ButtonClick);
      for(int i=0; i<9; i++)
      {
         baButtons[ i ] = new Button();
         baButtons[ i ].Size = aSize;
         baButtons[ i ].TabIndex = i;
         baButtons[ i ].Font = aFont;
         baButtons[ i ].Click += aHandler;
         baButtons[ i ].Location = new Point(50*(i%3), 50*(i/3));
      }
      Controls.AddRange(baButtons);

      ClientSize = new Size(150, 150);
      FormBorderStyle = FormBorderStyle.FixedSingle;
      MaximizeBox = false;
      Menu = mainMenu1;
      Text = "TicTacToe";

      ResumeLayout(false);
      SpielNeu();
   }

//##############################################################################

   static void Main()
   {
      Application.Run(new Form1());
   }

//##############################################################################

   private void SpielNeu()
   {
      foreach(Button aBtn in baButtons) aBtn.Text = "";
   }

//##############################################################################

   private bool Won(string sPlayer)
   {
      for(int i=0, iReihe; i<8; i++)
      {
         for(int j=iReihe=0; j<9; j++)
            if((ciWinningConsts[i,j] == 1) && (baButtons[j].Text == sPlayer)) iReihe++;
         if(iReihe == 3) return true;
      }
      return false;
   }

//##############################################################################

   private void MenuCloseClick(object sender, EventArgs e)
   {
      Close();
   }

//##############################################################################

   private void MenuNeuClick(object sender, EventArgs e)
   {
      SpielNeu();
   }

//##############################################################################

   private void ButtonClick(object sender, EventArgs e)
   {
      if(((Button)sender).Text != "") return;
        
      // Spieler: Zug        
      ((Button)sender).Text = "X";

      if(Won("X"))
      {
         MessageBox.Show("Player wins!");
         SpielNeu();
         return;
      }
        
      // Alle Felder belegt?
      for(int i=0; baButtons[ i ].Text != ""; i++) if(i==8)
      {
         MessageBox.Show("Stalemate");
         SpielNeu();
         return;
      }
        
      // Computer am Zug:
      // Wenn der Computer gewinnen kann, los!
      // Wenn der Spieler gewinnen kann, verhindern!
      foreach(Button aBtn in baButtons)
      {
         if(aBtn.Text == "")
         {
            aBtn.Text = "O";
            if(Won("O"))
            {
               MessageBox.Show("Computer wins!");
               SpielNeu();
               return;
            }
            aBtn.Text = "";
         }
      }
      foreach(Button aBtn in baButtons)
      {
         if(aBtn.Text == "")
         {
            aBtn.Text = "X";
            if(Won("X"))
            {
               aBtn.Text = "O";
               return;
            }
            aBtn.Text = "";
         }
      }

      // Wenn das Mittelfeld noch frei ist, belegen!
      // Ansonsten zufällig einen Punkt raussuchen
      int iPos = 4;
      while(baButtons[iPos].Text != "") iPos = rnd.Next(9);
      baButtons[iPos].Text = "O";
   }

//##############################################################################

}


--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.

Dieser Post wurde am 12.12.2002 um 21:08 Uhr von Bruder Leif editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
12.12.2002, 21:18 Uhr
e-Caf|Y|baB



Danke für die ausführliche Antwort, ich beginne mich immer mehr für C# zu interessieren ;-)
Kann man diese Komponenten wie z.B. System.Windows.Forms eigentlich auch mit anderen Programmiersprachen innerhalb .NET verwenden? Anders gefragt: Sind sie für jede Prog.sprache extra geschrieben, oder ist es compilierter Code, den jede Sprache verwenden kann?
Last but not least: Ist in .NET auch Java (J++) enthalten oder hat M$ das völlig aufgegeben (bzw. durch C# ersetzt) ?
Tschüss, e-Caf
--
There are 10 types of people - those who understand binary and those who
don't.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.12.2002, 12:46 Uhr
Bruder Leif
dances with systems
(Operator)


Moin!

Jepp, Du kannst mit dem "standard"-.NET-SDK sowohl unter C# als auch Visual Basic .NET, C++ und mit J# (Java-Syntax, aber die Klassenbibliothek von .NET) programmieren. J# ist für Java-Umsteiger gedacht, hat aber auch nur die Möglichkeiten von Java - auf die erweiterten Möglichkeiten, die z.B. C# bietet, müßtest Du verzichten. "Echtes" Java gibt es in .NET nicht mehr.

Alternativ gibt es einen Haufen kostenloser Compiler z.B. für Fortran, Eiffel, Pascal, sogar COBOL, alle für .NET. Das tolle daran ist, daß nicht nur die Klassen des .NET-Framework, sondern JEDE Klasse, die Du selbst schreibst, in JEDER Programmiersprache eingesetzt werden kann. Du könntest z.B. in C++ eine Klasse schreiben, davon eine C#-Klasse ableiten, und diese in einem Visual Basic-Programm einsetzen. Kein Problem, weil alle Sprachen in die MSIL compiliert werden, so ähnlich wie der Java-Bytecode.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C++CLI / VB .Net / .Net-Framework ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: