-2

以下の例外で太字とテキストフォントを赤で返すにはどうすればよいですか?「return" WMIError ";」の文言

これは、コードの後半で、テキストボックスにWMIパラメータを返すために使用されます...以下に示すように:

 private static string GetMOValue(ManagementObject mo, string name)
        {
            try
            {
                object result = mo[name];
                return result == null ? "" : result.ToString();
            }
            catch (Exception)
            {
                return "***WMI Error***";
            }
        }

        private void cmbHdd_SelectedIndexChanged(object sender, EventArgs e)
        {
            //try
            //{
                ManagementObjectSearcher mosDisks = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Model = '" + cmbHdd.SelectedItem + "'");
                foreach (ManagementObject moDisk in mosDisks.Get())
                {
                    //try
                    //{
                    txtSystemName.Text = GetMOValue(moDisk, "systemname");
                    txtType.Text = GetMOValue(moDisk, "MediaType");
                    txtModel.Text = GetMOValue(moDisk, "Model");
                    txtFirmware.Text = GetMOValue(moDisk, "FirmwareRevision");
.....
4

3 に答える 3

2

TextBoxはWebブラウザではありません。装飾や色などを使用せずに、単一のフォントでテキストを表示することをサポートしています。実行時にテキストボックスのフォントを変更できます。

これを実現するためにテキストボックスのイベントを処理することもできますがTextChanged、これは優れたコードの例ではありません。

private void textBox1_TextChanged(object sender, EventArgs e)
{
  Font defaultFont = SystemFonts.DefaultFont;

  if(textBox1.Text.StartsWith("**") && textBox1.Text.EndsWith("**"))
  {
    textBox1.Font = new Font(defaultFont.FontFamily, defaultFont.Size, FontStyle.Bold);
    textBox1.ForeColor = Color.Red;
    // note: can't change text here as it will recursively trigger this handler
  }
  else
  {
    textBox1.Font = defaultFont;
    textBox1.ForeColor = SystemColors.ControlText;
  }
}

より良いアプローチは、テキストとテキストボックスの属性を設定する単純なメソッドを持つことです。

石鹸箱:私は、テキストの**文字をチェックして、それがエラーであり、非常に醜く、信頼性が低いかどうかを確認するこの形式を検討していることに注意してください。あなたがすべきことは次のようなものを持っていることです

Font defaultFont = SystemFonts.DefaultFont;
try
{ 
   textBox1.Text = GetMOValue(...);
   textBox1.Font = defaultFont;
   textBox1.ForeColor = SystemColors.ControlText;
}
catch(Exception ex)
{ 
   textBox1.Text = "ERROR";
   textBox1.Font = new Font(defaultFont.FontFamily, defaultFont.Size, FontStyle.Bold);
   textBox1.ForeColor = Color.Red;
}
// the Font and ForeColor properties are repeatedly set in case that previous
// try had the different result (e.g. previous => error, current => OK, so 
// we need to reset the attributes of textbox

RichTextBox、WebBrowser、またはカスタム描画コントロールを使用して、より洗練されたフォーマットをサポートできます。

于 2012-09-26T10:50:52.497 に答える
2

メソッドが例外を返すかどうかを確認する必要があります。返される場合は、テキストボックスの設定フォントと色を動的に変更します。

textBox.ForeColor = Color.Red;    
textBox.Font = new Font(textBox.Font, FontStyle.Bold);
于 2012-09-26T11:00:59.000 に答える
-1
    private void btnBold_Click(object sender, EventArgs e)
    {
        this.rtxText.SelectionFont = new System.Drawing.Font(rtxText.Font.FontFamily,Convert.ToInt16(nudFontSize.Value), System.Drawing.FontStyle.Bold ^ this.rtxText.SelectionFont.Style);
    }

    //ITALICS CODING
    private void btnItalics_Click(object sender, EventArgs e)
    {
        this.rtxText.SelectionFont = new System.Drawing.Font(rtxText.Font.FontFamily, Convert.ToInt16(nudFontSize.Value), System.Drawing.FontStyle.Italic ^ this.rtxText.SelectionFont.Style);
    }

    //UNDERLINE CODING
    private void btnUnderline_Click(object sender, EventArgs e)
    {
        this.rtxText.SelectionFont = new System.Drawing.Font(rtxText.Font.FontFamily, Convert.ToInt16(nudFontSize.Value), System.Drawing.FontStyle.Underline ^ this.rtxText.SelectionFont.Style);
    }
于 2018-12-06T10:46:01.133 に答える