Windows Programming ---- Beginning Visual C#

更多相關文章,見本人的我的主頁:zhongxiewei.com

關於windows programming最爲基礎的就是須要掌握各類控件的使用方法,如Button Control, Label and LinkLabel Control, TextBox Control, RadioButton and CheckBox Control, ListBox and CheckedListBox Control, ListViewControl, TabControl Control等等。具體的使用方式能夠詳見《Beginning Visual C#》一書中。在這裏,對windows下的「記事本」功能進行了複製。具體代碼見: Notepadwindows

「記事本」的界面實現

對於內部的對話框,直接採用了「工具箱」中自帶的對話框,如FontDialog, OpenFileDialog, SaveFileDialog, PrintDialog, PageSetupDialog。函數

「記事本」相關功能

關於文件的打開,存儲,以及退出

新建工具

若是當前打開的文件沒有保存
    提示是否保存該文件
    選擇保存:
        跳出的另存爲對話框到文件默認的路徑,默認的文件名
        選擇保存:進行保存操做
        選擇取消:不進行任何操做,直接返回
    選擇不保存:直接新建;
    取消:不進行任何操做
不然
    直接新建

打開:字體

若是當前打開的文件沒有保存
    提示是否保存文件
    選擇保存:
        跳出的另存爲對話框到文件默認的路徑,默認的文件名
        選擇保存:進行保存操做
        選擇取消:不進行任何操做,直接返回
    選擇不保存:直接打開;
    取消:不進行任何操做
不然
    直接打開

保存spa

若是當前的文件不是打開獲得的
    彈出另存爲對話框,輸入文件名進行保存
不然
    直接保存到對應的文件

另存爲code

彈出另存爲對話框,輸入文件名進行保存

退出:orm

若是當前打開的文件沒有保存
    提示是否保存文件
    選擇保存:
        跳出的另存爲對話框到文件默認的路徑,默認的文件名
        選擇保存:進行保存操做
        選擇取消:不進行任何操做,直接返回
    選擇不保存:直接退出;
    取消:不進行任何操做
不然
    直接退出

從上述的文字描述中,能夠獲得複用的語句有:blog

若是當前打開的文件沒有保存
    提示是否保存文件
    選擇保存:
        跳出的另存爲對話框到文件默認的路徑,默認的文件名
        選擇保存:進行保存操做
        選擇取消:不進行任何操做,直接返回
    選擇不保存:直接退出;
    取消:不進行任何操做

檢查當前的文件是否沒有保存,若是否,進行選擇是否保存文件。能夠利用TextBox的TextChanged事件。當該事件發生時,設定textChanged變量爲true。當文件保存或是文件打開的時間成功完成以後,該值被賦值爲false。另外還須要實現的是「提示是否保存的對話框」。事件

進一步將上述複用的語句整理爲函數,以下:ip

// 若是文件沒保存,同時點擊了忽略選項,那麼返回false,不然範圍true
private bool isChangedTextProcessed()
{
    if (textChanged)
    {
        alertForm.SetMessage(fullname);
        DialogResult dlgResult = alertForm.ShowDialog();
        if (dlgResult == DialogResult.OK)
        {
            dlgResult = saveFileAs();
            if (dlgResult == DialogResult.Cancel) return false;
        }
        else if (dlgResult == DialogResult.Cancel) return false;
    }

    return true;
}

頁面設置以及打印相關

最爲關鍵的打印工做有printDocument掌控,以前,有pageSetupDialog用於頁面的設置,以及printDialog用於打印機的選擇等。

在打印的過程當中,須要注意的事情:當一行的字符串的長度比打印頁面區間的長度要大的時候,如何處理?沒有實現

撤銷,剪切,複製,粘帖,刪除功能的實現

每次當「編輯」的下拉菜單出現的時候,都會對「剪切」,「複製」,「刪除」的可訪問狀態進行設置。當有文本被選擇時,設置爲true;不然設置爲false。借用的事前爲:DropDownOpened事件。以下:

private void mitEdit_DropDownOpened(object sender, EventArgs e)
{
    if (Clipboard.ContainsText()) mitPaste.Enabled = true;
    else mitPaste.Enabled = false;

    if (txbMain.SelectedText.Equals(""))
    {
        mitCopy.Enabled = false;
        mitCut.Enabled = false;
        mitDelete.Enabled = false;
    }
    else
    {
        mitCopy.Enabled = true;
        mitCut.Enabled = true;
        mitDelete.Enabled = true;
    }
}

撤銷功能直接使用了「textbox」的「Undo」方法。複製使用了Clipboard.Clear(); Clipboard.SetText(selectedText);,剪切採用的方式爲:Clipboard.Clear();txbMain.Cut();,刪除採用的方式爲:int start=txbMain.SelectionStart; txbMain.Text = txbMain.Text.Substring(0,start) + txbMain.Text.Substring(start + txbMain.SelectionLength);,粘帖採用的方式以下:

private void mitPaste_Click(object sender, EventArgs e)
{
    int start = txbMain.SelectionStart;
    deleteText();
    string insertString = Clipboard.GetText();
    txbMain.Text = txbMain.Text.Insert(start, insertString);
    txbMain.SelectionStart = start + insertString.Length;
}

查找,查找下一個,替換功能的實現

當含有文字內容的時候,菜單中查找以及查找下一個的選項都爲可點擊的。當新建文件的時候,將它們的enable屬性設置爲false,當打開文件,或新建的文件已經進行了編輯,它們的enable屬性設置爲true。具體文本的查找,對於大小寫敏感的搜索方式,採用了string.IndexOf和string.LastIndexOf,對於大小寫不敏感的搜索方式,借用了System.Globalization.CompareInfo。

當點擊查找對話框右上角的叉的時候,默認狀況下爲銷燬該窗體,可是,這並非咱們想要的結果,咱們但願隱藏該窗體,而不是完全的銷燬該窗體,因而創建事件FormClosing(object sender, FormClosingEventArgs e),並在該事件中將e.Cancel設定爲true。

對於替換功能中,所有替換的點擊選項。採用了比較簡單的方法:依次使用查找下一個,和替換當前匹配的方式,最後直到徹底替換。其中對於大小寫匹配的問題在findNext 中進行實現,findNext以及替換功能的代碼以下:

private void findNext()
{
    int point = -1;
    point = parentText.SelectionStart + parentText.SelectionLength; // parentText表示主form窗口中的textbox
    if (ckbBigLo.Checked)
    {
        point = point > parentText.Text.Length ? -1 :
            parentText.Text.IndexOf(txbFindContent.Text, point);
    }
    else
    {
        point = point > parentText.Text.Length ? -1 :
            cmpInfo.IndexOf(parentText.Text, txbFindContent.Text, point, CompareOptions.IgnoreCase);
    }

    if (point == -1)
    {
        MessageBox.Show("找不到" + txbFindContent.Text, "記事本",
            MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
    }
    else
    {
        parentText.Select(point, txbFindContent.Text.Length);
        parentText.ScrollToCaret();
        parentForm.Active();
    }
}

private void replace()
{
    string selectedText = parentText.SelectedText.ToLower();
    int start = parentText.SelectionStart;
    
    if (selectedText.Equals(txbFindContent.Text.ToLower()))    
    {
        parentText.Text = parentText.Text.Substring(0, start) + 
            txbReplaceContent.Text +
            parentText.Text.Substring(start + selectedText.Length);
        partentText.SelectionStart = start + txbReplaceContent.Text.Length;
    }
}

字體設置

字體的設置採用了現有的fontdialog

相關文章
相關標籤/搜索