[Mono-list] A couple of SWF questions

Paul F. Johnson paul at all-the-johnsons.co.uk
Tue Mar 7 09:58:29 EST 2006


Hi,

The code attached works fine with Mono. VC# moans like crazy and I'm not
sure why - comments would be welcome.

The code also has 2 problems. The first is that then Address label
doesn't appear and it should (could someone confirm this so that I can
file it in Bugzilla) and the second is the KeyPress event for the
NumberBox is being ignored (from what I can see). Again, if someone can
confirm this, I'd appreciate it.

The code compiles without a hitch under Mono 1.1.13. I'm using the
Fedora Core RPMs over the build from source (don't ask).

Sorry about the length...

using System.Windows.Forms;
using System.ComponentModel;
using System.Collections;
using System.Drawing;

public class testwindow : Form
{
  private Label ServerAddress;
  private Label Address;
  private Label User;
  private Label Pass;
  private Button Connect;
  private TextBox Username;
  private TextBox Password;
  private ComboBox IPAddress;
  private NumberBox[] IP;

  private GroupBox box;

  private StatusBar StateBar;
  private ProgressBar Progress;
  private Label Connection;

  private System.ComponentModel.Container components = null;

  private testwindow()
  {
    InitializeComponent();
  }

  protected override void Dispose(bool disposing)
  {
    if (disposing)
    {
      if (components != null)
      {
	components.Dispose();
      }
    }
    base.Dispose(disposing);
  }

  private void InitializeComponent()
  {
    this.SuspendLayout();

    this.Size = new Size(300, 150);
    this.Text = "Server connection";

    this.ServerAddress = new Label();
    this.ServerAddress.Size = new Size(72, 12);
    this.ServerAddress.Name = "address";
    this.ServerAddress.Text = "Server Address";
    this.ServerAddress.Location = new Point(11, 14);
    this.ServerAddress.TabIndex = 0;

    this.IPAddress = new ComboBox();
    this.IPAddress.DropDownStyle = ComboBoxStyle.DropDownList;
    this.IPAddress.BackColor = Color.White;
    this.IPAddress.ForeColor = Color.Black;
    this.IPAddress.Size = new Size(160, 8);
    this.IPAddress.Name = "ipaddress";
    this.IPAddress.Location = new Point(100, 12);
    this.IPAddress.Items.Add("Localhost");
    this.IPAddress.Items.Add("Other");
    this.IPAddress.SelectedIndex = 0;
    this.IPAddress.SelectedIndexChanged += new
System.EventHandler(this.IPAddress_SelectedIndexChanged);
    this.IPAddress.TabIndex = 1;

    this.Address = new Label();
    this.Address.Size = new Size (72, 12);
    this.Address.Name = "numaddr";
    this.Address.Text = "IP Address";
    this.Address.Enabled = false;
    this.Address.Location = new Point(11, 36);
    this.Address.TabIndex = 2;

    this.IP = new NumberBox[4];
    for (int i = 0; i < 4; ++i)
    {
      this.IP[i] = new NumberBox();
      this.IP[i].Size = new Size(44, 8);
      this.IP[i].Enabled = false;
      this.IP[i].Location = new Point(100 + (48 * i), 34);
      this.IP[i].TabIndex = 3 + i;
      this.IP[i].MaxLength = 3;
    }

    this.User = new Label();
    this.User.Size = new Size(54, 12);
    this.User.Name = "user";
    this.User.Text = "Username";
    this.User.Location = new Point(11, 64);
    this.User.TabIndex = 7;

    this.Username = new TextBox();
    this.Username.Size = new Size(80, 8);
    this.Username.Name = "username";
    this.Username.Location = new Point(70, 62);
    this.Username.TextChanged += new
System.EventHandler(this.Username_TextChanged);
    this.Username.TabIndex = 8;

    this.Pass = new Label();
    this.Pass.Size = new Size(48, 12);
    this.Pass.Name = "pass";
    this.Pass.Text = "Password";
    this.Pass.Location = new Point(150, 64);
    this.Pass.TabIndex = 9;

    this.Password = new TextBox();
    this.Password.Size = new Size(80, 12);
    this.Password.Name = "password";
    this.Password.PasswordChar = (char)'*';
    this.Password.Location = new Point (200, 62);
    this.Password.TextChanged += new
System.EventHandler(this.Password_TextChanged);
    this.Password.TabIndex = 10;

    this.box = new GroupBox();
    this.box.SuspendLayout();
    this.box.Controls.AddRange(new Control[] 
	{this.ServerAddress, this.IPAddress, this.Address, this.IP[0],
	 this.IP[1], this.IP[2], this.IP[3], this.User, this.Username,
	 this.Pass, this.Password});
    this.box.Location = new Point(8, 4);
    this.box.Name = "groupbox";
    this.box.Size = new Size(290, 86);
    this.box.Text = "Connection details";
    this.box.TabIndex = 11;

    this.Connect = new Button();
    this.Connect.Size = new Size(70, 20);
    this.Connect.Name = "connect";
    this.Connect.Enabled = false;
    this.Connect.Text = "Connect";
    this.Connect.Location = new Point (200, 100);
    this.Connect.Click += new System.EventHandler(this.Connect_Click);
    this.Connect.TabIndex = 12;

    this.StateBar = new StatusBar();
    this.StateBar.Location = new Point(0, 130);
    this.StateBar.Height = 20;
    this.StateBar.Name = "status";
    this.StateBar.ForeColor = Color.Blue;
    this.StateBar.Text = "Disconnected";
    this.StateBar.TabIndex = 13;

    this.Connection = new Label();
    this.Connection.Size = new Size(50, 12);
    this.Connection.Text = "Progress";
    this.Connection.Enabled = false;
    this.Connection.Name = "connprog";
    this.Connection.Location = new Point(11, 106);
    this.Connection.TabIndex = 14;

    this.Progress = new ProgressBar();
    this.Progress.Location = new Point(68,100);
    this.Progress.Minimum = 0;
    this.Progress.Step = 1;
    this.Progress.Maximum = 10;
    this.Progress.Name = "progbar";
    this.Progress.Enabled = false;
    this.Progress.TabIndex = 15;

    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.Controls.AddRange(new Control[] {this.box,
					  this.Connect, this.Connection,
					  this.StateBar, this.Progress,
					  this.Address});
    this.box.ResumeLayout();
    this.ResumeLayout();
  }

  public static void Main()
  {
    testwindow t = new testwindow();
    Application.Run(t);
  }

  private void Password_TextChanged(object sender, System.EventArgs e)
  {
    if (Username.Text.Length > 0 && Password.Text.Length > 0)
      Connect.Enabled = true;
    else
      Connect.Enabled = false;
  }

  private void Username_TextChanged(object sender, System.EventArgs e)
  {
    if (Username.Text.Length > 0 && Password.Text.Length > 0)
      Connect.Enabled = true;
    else
      Connect.Enabled = false;
  }

  private void IPAddress_SelectedIndexChanged(object sender,
System.EventArgs e)
  {
    Address.Enabled = IPAddress.SelectedIndex == 1 ? true : false;
    for (int i = 0; i < 4; ++i)
    {
      IP[i].Enabled = IPAddress.SelectedIndex == 1 ? true : false;
    }
  }

  private void Connect_Click(object sender, System.EventArgs e)
  {
  }
}

class NumberBox : TextBox
{
  public NumberBox()
  {
    this.KeyPress += new KeyPressEventHandler(NumberBox_KeyPress);
  }

  private void NumberBox_KeyPress(object sender, KeyPressEventArgs kpe)
  {
    int KeyCode = (int)kpe.KeyChar;
    if (!IsNumberInRange(KeyCode, 48, 57) && KeyCode != 8)
      kpe.Handled = true;
  }

  private bool IsNumberInRange(int Val, int Min, int Max)
  {
    return (Val >= Min && Val <= Max);
  }
}

TTFN

Paul
-- 
"Logic, my dear Zoe, is merely the ability to be wrong with authority" -
Dr Who



More information about the Mono-list mailing list