2011-11-17 37 views
-3

我做了文本框,但它需要發送數據到其他應用程序,它們具有自定義格式(如%B用於粗體,如果您想關閉粗體,則鍵入普通字體的關鍵字,並且所以)。做兩件事情的文本框

因此,格式與平時相比有很大的不同。我使用可以爲文本格式添加關鍵字的按鈕製作文本框,並且工作正常,但是如果我需要在同一應用中的一個標籤中進行預覽,那麼執行此操作的好方法是什麼? (我做了預覽按鈕,發送文本到標籤)

很顯然,我需要設置%B是在標籤中啓動粗體文本,所以對於其他格式化關鍵字,除非有更好的方法?

+1

這很難閱讀和解決你真正需要幫助的東西。最好的辦法是嘗試一些看起來可能有效的方法,然後向我們展示代碼,然後我們可以幫助改進它。 – Widor

+0

爲什麼不使用像SO這樣的降價:http://daringfireball.net/projects/markdown/syntax –

回答

1

你的問題並不清楚,你是否嘗試從文本框格式化字符串以顯示帶或不帶粗體的標籤,或者您是否試圖在標籤中顯示格式化示例(如%B)?

第二個選項我會使用一個文字字符串,以便標誌不會讓你感到困擾。 即:

string here = @"%Byourtextboxtext"; 

對於第一種選擇,我認爲你需要創建在您處理字符串的函數。該函數應該接收一個字符串,根據自定義格式修改標籤,清理字符串並將其應用到標籤。 即:

 if (textBox1.Text.StartsWith(@"%B")) 
     { 
      char[] here = {'%', 'B'}; 
      label1.Font = new Font(label1.Font, FontStyle.Bold); 
      label1.Text = textBox1.Text.TrimStart(here); 
     } 
+0

1.主要是通過外部應用程序的規則進行格式化,例如%B用於粗體,這很好,而且我需要以外部應用可以看到的方式在標籤中進行預覽。那麼,如何讓這種標籤格式化爲外部應用程序呢?希望現在更清楚。 –

+1

看看編輯是否有幫助。 – NicoTek

+0

我會嘗試這裏提到的所有變體,並查看適合的內容。謝謝。 –

1

通常把邏輯這樣到它自己的類通常使得它更容易看到一些代碼片段應該去。在你的例子中,我將創建一個包含文本的FormattedTextModel。您的可編輯文本框可以更改此模型,預覽標籤可偵聽對此模型的更改並在需要時自行更新。

預覽文本框需要知道如何以另一種方式格式化文本以便可以查看它,例如使用RTF textbox

class FormattedTextModel 
{ 
    private string _raw; 

    public event EventHandler TextChanged; 

    public string RawText 
    { 
     set 
     { 
      _raw = value; 
      EventHandler tmp = TextChanged; 
      if (tmp != null) tmp(this, EventArgs.Empty); 
     } 
     get { return _raw; } 
    } 

    public string RTFText 
    { 
     return <Convert to rtf here> 
    } 
} 

所以可編輯文本框和文本預覽有兩對這個模型的實例的引用。可以在可編輯文本框上的按鍵上更改該模型以獲得預覽的「實時」更新,或者在使用按鈕等時觸發。

1

您可以創建一個自定義的控制,從標籤或Control繼承,然後 必須重寫的OnPaint()控制的方法和油漆你的願望文本(粗體,斜體),像這樣的僞代碼:

 protected override void OnPaint(PaintEventArgs e) 
     { 
      //base.OnPaint(e);//must be clear 
      //tranlate your metaText for exapmle after translate: 
      e.Graphics.DrawString("B", Font(Bold), Brush, Ponit); 
      e.Graphics.DrawString("B", Font(Regular), Brush, Ponit+n); 
     } 
+0

錯誤:對不起,我想在Windows應用程序中... –