web-dev-qa-db-ja.com

C#ラベルのフォントを変更する方法

ラベルとボタン「オプション」のあるフォーム。ボタンをクリックすると、2つのラジオボタン「Font1」と「Font2」、および2つのボタン「Apply」と「Cancel」で新しいフォームが開きます。ラジオボタンの1つを選択して[適用]をクリックすると、最初のフォームのラベルのフォントが変更されます。問題は、たとえばTahomaからArialまたはラベルの他のフォントフェイスにフォントを変更する方法です。

適用ボタンのオプションフォームコード。クリックすると、dialogresult.ok == trueが返され、最初のフォームのラベルのフォントが変更されます。

private void btnApply_Click(object sender, EventArgs e)
{
    if (radioFont1.Checked)
    {
        mainForm.lblName.Font.Name = "Arial"; 'wrong attempt 
    }
    this.DialogResult = DialogResult.OK;
}

2番目のフォームから見えるように、最初のフォームのラベルを宣言します。

public static Label lblName = new Label();

...

private void mainForm_Load(object sender, EventArgs e)
{
    lblName = lblBarName;
}
17
TheEnd

Font.NameFont.XYZPropertyなどはFontが不変オブジェクトであるため読み取り専用であるため、新しい Font オブジェクトを指定する必要がありますそれ:

mainForm.lblName.Font = new Font("Arial", mainForm.lblName.Font.Size);

その他のオプションについては、Fontクラスのコンストラクターを確認してください。

32
djdd87

作成したフォントを変更することはできません-そのため、新しいフォントを作成する必要があります。

  mainForm.lblName.Font = new Font("Arial", mainForm.lblName.Font.Size);
8
Reed Copsey

新しいフォントを作成する必要があります

mainForm.lblName.Font = new Font("Arial", mainForm.lblName.Font.Size);
4
Borja

実際の完全なコードの答えがないことに気づいたので、これに出くわすと、簡単に変更できるフォントを変更する関数を作成しました。私はこれをテストしました

-XP SP3およびWin 10 Pro 64

private void SetFont(Form f, string name, int size, FontStyle style)
{
    Font replacementFont = new Font(name, size, style);
    f.Font = replacementFont;
}

ヒント:FormをLabel、RichTextBox、TextBox、またはフォントを使用してフォントを変更するその他の相対コントロールに置き換えます。上記の関数を使用して、完全に動的にします。

    /// To call the function do this.
    /// e.g in the form load event etc.

public Form1()
{
      InitializeComponent();
      SetFont(this, "Arial", 8, FontStyle.Bold);  
      // This sets the whole form and 
      // everything below it.
      // Shaun Cassidy.
}

また、すべてのバックエンドビットをコーディングする必要がないように完全なライブラリが必要な場合は、Githubから私のdllをダウンロードできます。

Github DLL

/// and then import the namespace
using Droitech.TextFont;

/// Then call it using:
TextFontClass fClass = new TextFontClass();
fClass.SetFont(this, "Arial", 8, FontStyle.Bold);

シンプル。

0
MasterCassidy