blob: 84103349d4f757add25d4b29259d279486352674 [file] [log] [blame]
// Example for use of GNU gettext.
// This file is in the public domain.
//
// Source code of the C#/Forms program.
using System; /* String, EventHandler */
using GNU.Gettext; /* GettextResourceManager */
using System.Diagnostics; /* Process */
using System.Threading; /* Thread */
using System.Drawing; /* Point, Size */
using System.Windows.Forms; /* Application, Form, Label, Button */
public class Hello {
private static GettextResourceManager catalog =
new GettextResourceManager("hello-csharp-forms");
class HelloWindow : Form {
private int border;
private Label label1;
private Label label2;
private Button ok;
public HelloWindow () {
border = 2;
label1 = new Label();
label1.Text = catalog.GetString("Hello, world!");
label1.ClientSize = new Size(label1.PreferredWidth, label1.PreferredHeight);
Controls.Add(label1);
label2 = new Label();
label2.Text =
String.Format(
catalog.GetString("This program is running as process number {0}."),
Process.GetCurrentProcess().Id);
label2.ClientSize = new Size(label2.PreferredWidth, label2.PreferredHeight);
Controls.Add(label2);
ok = new Button();
Label okLabel = new Label();
ok.Text = okLabel.Text = "OK";
ok.ClientSize = new Size(okLabel.PreferredWidth + 12, okLabel.PreferredHeight + 4);
ok.Click += new EventHandler(Quit);
Controls.Add(ok);
Size total = ComputePreferredSizeWithoutBorder();
LayoutControls(total.Width, total.Height);
ClientSize = new Size(border + total.Width + border, border + total.Height + border);
}
protected override void OnResize(EventArgs ev) {
LayoutControls(ClientSize.Width - border - border, ClientSize.Height - border - border);
base.OnResize(ev);
}
// Layout computation, part 1: The preferred size of this panel.
private Size ComputePreferredSizeWithoutBorder () {
int totalWidth = Math.Max(Math.Max(label1.PreferredWidth, label2.PreferredWidth),
ok.Width);
int totalHeight = label1.PreferredHeight + label2.PreferredHeight + 6 + ok.Height;
return new Size(totalWidth, totalHeight);
}
// Layout computation, part 2: Determine where to put the sub-controls.
private void LayoutControls (int totalWidth, int totalHeight) {
label1.Location = new Point(border, border);
label2.Location = new Point(border, border + label1.PreferredHeight);
ok.Location = new Point(border + totalWidth - ok.Width, border + totalHeight - ok.Height);
}
private void Quit (Object sender, EventArgs ev) {
Application.Exit();
}
}
public static void Main () {
Application.Run(new HelloWindow());
}
}