2016-05-05 11 views
1

私はComboBoxのフォームを持っています。私はこれをシステム上の利用可能なフォントで埋めて、これらのオプションの1つを選択させたいと思います。 データソースを使用したC#コンボボックスとVisual Studio 2013

が、私はこれを達成するために異なるアプローチのために見て、私はすべてのフォントで ComboBoxをロードするために、この質問と回答を使用する:これは、現在、私のコードをある Fill ComboBox with List of available Fonts

作品:

form.comboBox2.Items.Clear(); 

System.Drawing.Text.FontCollection fontcoll = new System.Drawing.Text.InstalledFontCollection(); 

foreach (FontFamily font in fontcoll.Families) 
{ 
    form.comboBox2.Items.Add(font.Name); 
} 

をしかし、今私は代わりにDataSourceプロパティを使用しようとしており、System.Drawing.Text.InstalledFontCollectionをプロジェクトにデータソースとしてインポートしました。ここで

は、デザイナーのコードです:

form.comboBox2.Text = "Times New Roman" 

// 
// comboBox2 
// 
this.comboBox2.DataSource = this.installedFontCollectionBindingSource; 
this.comboBox2.FormattingEnabled = true; 
this.comboBox2.Location = new System.Drawing.Point(16, 44); 
this.comboBox2.Name = "comboBox2"; 
this.comboBox2.Size = new System.Drawing.Size(144, 21); 
this.comboBox2.TabIndex = 9; 
this.comboBox2.SelectedIndexChanged += new System.EventHandler(this.comboBox2_SelectedIndexChanged); 

は、その後、フォームの私の初期設定では、私はこのデフォルトとしてのTimes New Romanにフォント名を選択し設定することがあります私はこれがComboBoxを記入し、Times New Romanを選択するのに十分だと思ったが、明らかに十分ではない。 Times New Romanは表示されますが、ボックスは空です。コンボボックスを移入するデータソースの作り方)

1:私は助けを得るしたいと思いますどのような

2)ユーザーがボックスからエントリの1つを選択し、リストにない他の値を入力しないようにする簡単な方法はありますか(VBAユーザーフォームの「MatchRequired」プロパティと同様)?

ありがとうございます。

答えて

1

インストールされているすべてのフォントファミリのリストを取得してから、リストをDataSourceとしてComboBoxに設定する必要があります。コンボボックスのDropDownStyleDropDownListに設定することもできます。

private void Form1_Load(object sender, EventArgs e) 
{ 
    this.comboBox1.DataSource = new InstalledFontCollection().Families; 
    this.comboBox1.DisplayMember = "Name"; 
    this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; 
    this.comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged; 
} 

あなたはComboBoxSelectedValueからフォントファミリを選択することができます。たとえば:

void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if (this.comboBox1.SelectedValue != null) 
     this.Font = new Font((FontFamily)this.comboBox1.SelectedValue, this.Font.Size); 
} 
+0

グレート! 2つの質問:1) 'System.Drawing.Text.InstalledFontCollection'コレクションをコンボボックスの' DataSource'プロパティにインポートすることもオプションではありませんか? 2)「Times New Roman」の代わりに「Timesが悲しい時」のように、ユーザーが新しい何かを入力しないようにする方法がありますか... – ib11

+0

その間に私は第2の質問に本当に答えました。 ComboBoxStyle.DropDownList'これにより、リストがロックされ、セレクタとしてのみ表示されます。 – ib11

+1

** 1)**新しいInstalledFontCollection()から 'Families'を使うべきです。Families' ** 2)**コンボボックスの 'DropDownStyle'を' DropDownList'に設定すると 'ComboBox'に入力できなくなります –

1

あなたが使用することができますプロパティDropDownStyle

private void Form1_Load(object sender, EventArgs e) 
{ 
    FontFamily[] fontArray = FontFamily.Families; 
    foreach (FontFamily font in fontArray) 
    { 
     comboBox1.Items.Add(font.Name); 
    } 
    comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; 

} 

は、ユーザーがリストの選択肢に制限されています。例えば

あなたがラベルにサイズ14でフォントを割り当てる場合:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    label1.Font = new Font(comboBox1.Text , 14); 
} 
関連する問題