c#界面設計
提問問題
列表
-
C#怎么實現頁面打印功能?有相應控件嗎?代碼怎么寫?有例子更好,謝謝!
查看答案>>
-
用C#編寫設計一個Windows應用程序,程序中定義一個學生類,
查看答案>>
-
求C#窗體程序工具箱各種控件的用處及各屬性的用處
查看答案>>
-
C# WPF界面設計,不同按鈕顯示不同的界面,需要新建多個頁面嗎?如何按各自的按鈕顯示各自的頁面。
查看答案>>
-
C#怎么通過控件名稱找到窗口設計里對應的控件
查看答案>>
-
C#如何通過一個按鈕實現窗體界面的中英文切換?
查看答案>>
-
請教devexpress的winform界面開發基本步驟
查看答案>>
-
用vs2010做c#的窗口程序,新建了一個程序,這時候是有設計視圖的(那個即時的窗體視圖),
查看答案>>
-
c#中兩個數求和界面設計及程序編寫
查看答案>>
-
c++和c#哪個做界面更好?
查看答案>>
C#怎么實現頁面打印功能?有相應控件嗎?代碼怎么寫?有例子更好,謝謝!
Winform里集成了幾個打印控件:PrintPreviewDialog,PrintDocument,PrintDialog,PageSetupDialog,PrintPreviewControl,看書看資料會把人看暈,實際上打印核心控件只有一個,就是PrintDocument,PrintPreviewDialog也有點用,就是頁面預覽控件,真正開發中如果需要打印功能,一般會從網上Down現成的控件,如果要自己手動寫,費時又費力,本著學習的態度,我們需要知道打印是怎么實現的,寫兩個比較常用的打印服務,一個是打印DataTable的,另一個是打印TextBox的。 示例一:以表格形式打印DataTable內的數據//定義全局變量count,儲存當前打印的行數int count=0;//定義一個方法,接收一個DataTable類型參數及PrintDocument的PrintPage事件傳入的參數e以方便操作private voidPrintTable(DataTable dt, System.Drawing.Printing.PrintPageEventArgse){ //取得對應的Graphics對象 Graphicsg = e.Graphics; //獲得相關頁面X坐標、Y坐標、打印區域寬度、長度 intx = e.PageSettings.Margins.Left; inty = e.PageSettings.Margins.Top; intwidth = e.PageSettings.PaperSize.Width -e.PageSettings.Margins.Left- e.PageSettings.Margins.Right; intheight = e.PageSettings.PaperSize.Height -e.PageSettings.Margins.Top -e.PageSettings.Margins.Bottom; //定義打印字體 Fontfont = new Font("宋體",15); //rowCount是除去打印過的行數后剩下的行數 introwCount = dt.Rows.Count-count; //maxPageRow是當前設置下該頁面可以打印的最大行數 intmaxPageRow=height/(int)font.GetHeight(); //因為是表格,先畫一條水平直線 g.DrawLine(newPen(Brushes.Black, 1), new Point(x, y), new Point(x +(dt.Columns.Count) * 135, y)); //再畫出表格各列的列標題 for(int i = 0; i < dt.Columns.Count; i++) { stringhead = dt.Columns[i].ColumnName; g.DrawString(head,font, Brushes.Black, x + i * 135, y); } //畫完標題,再畫一條直線 g.DrawLine(newPen(Brushes.Black, 1), new Point(x, y + (int)font.GetHeight()), newPoint(x + (dt.Columns.Count) * 135, y +(int)font.GetHeight())); //判斷,如果剩下的行數小于可打印的最大行數,則執行下列代碼 if(maxPageRow >=rowCount) { //當前行數小于Table內總行數時,循環 while(count < dt.Rows.Count) { //內循環打印Table內行數據 intcolumnCount = 0; while(columnCount < dt.Columns.Count) { stringtemp = dt.Rows[count][columnCount].ToString(); //打印每個單元格內的數據 g.DrawString(temp,font, Brushes.Black, x + columnCount * 135, y + (count %maxPageRow) * (int)font.GetHeight() +(int)font.GetHeight()); //打印完一行后,繼續打印一條直線 g.DrawLine(newPen(Brushes.Black, 1), new Point(x, y + (count % maxPageRow) *(int)font.GetHeight() + 2 * (int)font.GetHeight()), new Point(x +(dt.Columns.Count) * 135, y + (count % maxPageRow) *(int)font.GetHeight() + 2 * (int)font.GetHeight())); columnCount++; } count++; } //所有數據打印完畢后,打印垂直直線 for (int i = 0; i <= dt.Columns.Count; i++) { g.DrawLine(newPen(Brushes.Black), new Point(x + i * 135, y), new Point(x + i *135, y + rowCount * (int)font.GetHeight() +(int)font.GetHeight())); } } //判斷,如果剩下的行數大于可打印的最大行數,則執行下列代碼 else { do { //與上面類似,注意下面while的條件 intcolumnCount = 0; while(columnCount < dt.Columns.Count) { stringtemp = dt.Rows[count][columnCount].ToString(); //打印每個單元格 g.DrawString(temp,font, Brushes.Black, x + columnCount * 135, y + (count %maxPageRow) * (int)font.GetHeight() +(int)font.GetHeight()); //打印水平直線 g.DrawLine(newPen(Brushes.Black, 1), new Point(x, y + (count % maxPageRow) *(int)font.GetHeight() + 2 * (int)font.GetHeight()), new Point(x +(dt.Columns.Count)*135, y + (count % maxPageRow) *(int)font.GetHeight() + 2 * (int)font.GetHeight())); columnCount++; } count++; }while ((count % maxPageRow >0)); //打印垂直直線 for(int i = 0; i <= dt.Columns.Count;i++ ) { g.DrawLine(newPen(Brushes.Black), new Point(x + i * 135, y), new Point(x + i *135, y + height + (int)font.GetHeight())); } } //指定HasMorePages值,如果頁面最大行數小于剩下的行數,則返回true(還有),否則返回false if(maxPageRow<rowCount) { e.HasMorePages= true; } else { e.HasMorePages= false; count= 0; } } 奇長無比,打印的原理就是畫,所有東西都是畫出來的,大體思路就是這樣,其他的無非就是計算跟調整間距問題,多試幾次不難,我覺得最難的部分是循環取值及設置HasMorePages屬性,PrintDocument的PrintPage方法是打印完一頁調用一次,因此當自己做打印設置時,需要清楚的知道哪些變量需要儲存為全局變量以方便記錄打印位置,HasMorePages屬性也需要注意,是不是只需要一個條件就可以指定其值,很多情況下需要多個條件同時滿足,另外對畫表格這種事情來說,前幾頁跟最后一頁while里條件寫法肯定是不同的,寫一起就亂套了,最后,在給HasMorePages設置為false后,不要忘記把你的全局變量恢復初始值,否則連點兩下打印預覽就沒數據了,以上是A4大小,如果只實現簡單打印,這樣足夠了,如果設計到調整頁面,設置字體等等,抱歉,做不了,這就需要網上DOWN現成的了。下一個說說TextBox里的文本打印。 示例二:文本打印//設置全局變量保存截取字符串位置int sub=0;private void printText(stringtext, System.Drawing.Printing.PrintPageEventArgs e) { //取得Graphics實例 Graphics g = e.Graphics; //獲得相關點坐標、長度、寬度 int x = e.PageSettings.Margins.Left; int y = e.PageSettings.Margins.Right; int width =e.PageSettings.PaperSize.Width-e.PageSettings.Margins.Left-e.PageSettings.Margins.Right; int height =e.PageSettings.PaperSize.Height-e.PageSettings.Margins.Top-e.PageSettings.Margins.Bottom; //設置字體 Font font=new Font("宋體",15); //這個方法后面講 g.MeasureString(text.Substring(sub), font, new SizeF(width,height-10), new StringFormat(), out charnum, out line); //打印string g.DrawString(text.Substring(sub), font, Brushes.Black, newRectangleF(x, y, width, height), newStringFormat()); //設置截取位置 sub += charnum; //設置HasMorePage屬性 if (sub < this.txtText.Text.Length) { e.HasMorePages = true; } else { e.HasMorePages = false; sub=0; } } 注意問題有這么幾點,MeasureString方法單獨拿出來說,此方法的通俗理解就是,把一個字符串按照指定的矩形區域、字符串格式、字體選取,并在選取后將字符數量,所需行數保存在兩個outint變量中,第一個參數,需要操作的字符串;第二個,字體;第三個,區域;第四個,字符串的格式化樣式;第五個,字符個數;第六個,所需行數。注意的是兩個outint類型的參數,這里跟ref類型差不多,當傳遞參數的時候,實際傳遞的是參數的地址,因此在方法內部對參數做了修改之后,會反應到源數據上,因此在執行完這個方法后,你所傳遞進來的兩個參數已經保存了相關信息。DrawString方法也使用了其中一個帶有RectangleF參數的重載方法,目的是與MeasureString相吻合,注意我劃線幾個地方的寫法,注意MeasureString中第一個參數string同樣需要截取。 兩個例子說完了,下面說說怎么調用打印方法://打印預覽private voidbutton2_Click(object sender, EventArgs e) { //注意指定其Document屬性 this.printPreviewDialog1.Document = this.printDocument1; this.printPreviewDialog1.ShowDialog(); } //打印 private voidbutton1_Click(object sender, EventArgs e) { //同樣注意指定Document屬性 this.printDialog1.Document = this.printDocument1; if (this.printDialog1.ShowDialog() == DialogResult.OK) { //觸發PrintDocument的PrintPage事件 this.printDocument1.Print(); } }
求C#窗體程序工具箱各種控件的用處及各屬性的用處
打開VS,然后鼠標點擊toolbox那里,再然后摁F1,就可以轉到那個官方幫助手冊了http://msdn.microsoft.com/en-us/library/2381cd09(v=vs.110).aspx
C# WPF界面設計,不同按鈕顯示不同的界面,需要新建多個頁面嗎?如何按各自的按鈕顯示各自的頁面。
跳轉不需要。你應該知道UserControl 再了解一下ContentControl控件就知道了。
C#如何通過一個按鈕實現窗體界面的中英文切換?
一、窗體的國際化解決方案新建一個WinForm解決方案后,選擇主窗體,右擊查看屬性,找到Localizable屬性,將其置為True,然后找到Language屬性,選擇你需要切換的語言,比如英語(美國)、中文(簡體,中國)等。此時根據實際情況設計該Language下的窗體樣式及語言。 圖1 Form的屬性設置 圖2 根據選擇的語言,自動生成的資源文件二、使用CultureInfo類實現國際化解決方案CultureInfo 類包含區域性特定的信息,例如語言、國家/地區、日歷以及區域性約定。 using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace LocationForm { static class Program { /// <summary> /// 應用程序的主入口點。 /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); //System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("en-US"); System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN"); Application.Run(new Form1()); } } } 三:實現效果 官方參考文獻:http://msdn.microsoft.com/zh-cn/library/h6270d0z.aspx另外您可能是需要動態切換語言的吧.接著往下看.在 Visual Studio 的設計視圖中,如果在 Properties 窗口中改變了程序的默認界面語言(Language),我們會注意到無論是工程還是窗體對應的 .Designer.cs 文件都會有顯著的改變。比如,我們創建一個叫 MyForm 的 form,并且添加一個叫 MyButton 的按鈕。在改變窗體 Properties 中的 Language 屬性之前, .Designer.cs 代碼文件中的 InitializeComponent 方法的內容大致如下:private void InitializeComponent(){this.myButton = new System.Windows.Forms.Button();this.SuspendLayout();//// myButton//this.myButton.Location = new System.Drawing.Point(100, 200);this.myButton.Name = "myButton";this.myButton.Size = new System.Drawing.Size(75, 23);this.myButton.TabIndex = 0;this.myButton.Text = "My Button";this.myButton.UseVisualStyleBackColor = true;//// myForm//this.ClientSize = new System.Drawing.Size(292, 273);this.Controls.Add(this.myButton);this.Name = "MyForm";this.Text = "My Form";this.ResumeLayout(false);}而在改變了窗體 Properties 中的 Language 屬性之后,工程中除了默認的 .resx 文件之外,還會自動添加一個 .zh-CHS.resx 文件(假設我們將 Language 改變為 Chinese (Simplified))。另外,.Designer.cs 文件中的 InitializeComponent 方法也會改變成:private void InitializeComponent(){System.ComponentModel.ComponentResourceManager resources= new System.ComponentModel.ComponentResourceManager(typeof(MyForm));this.myButton = new System.Windows.Forms.Button();this.SuspendLayout();//// myButton//this.myButton.AccessibleDescription = null;this.myButton.AccessibleName = null;resources.ApplyResources(this.myButton, "myButton");this.myButton.BackgroundImage = null;this.myButton.Font = null;this.myButton.Name = "myButton";this.myButton.UseVisualStyleBackColor = true;//// myForm//this.AccessibleDescription = null;this.AccessibleName = null;resources.ApplyResources(this, "$this");this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;this.BackgroundImage = null;this.Controls.Add(this.myButton);this.Font = null;this.Icon = null;this.Name = "myForm";this.ResumeLayout(false);}我們注意到改變 Language 屬性之后,代碼的主要變化有:ComponentResourceManager resources = new ComponentResourceManager(typeof(MyForm));resources.ApplyResources(this.myButton, "myButton"); resources.ApplyResources(this, "$this");另外,設置控件屬性(比如顯示文字 Text,控件大小 Size,顯示位置 Location 等)的代碼都沒有了。也就是說設置控件屬性的代碼都是由 resources.ApplyResource 方法來完成的。那么在我們想改變 WinForm 程序的界面顯示語言的時候,能不能直接調用 ApplyResources 方法呢?答案是肯定的。為 myButton 添加 Click 事件的事件處理函數:private void myButton_Click(object sender, EventArgs e){int currentLcid = Thread.CurrentThread.CurrentUICulture.LCID;currentLcid = (currentLcid == 2052) ? 1033 : 2052; // Changes the CurrentUICulture property before changing the resources that are loaded for the win-form.Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentLcid); // Reapplies resources.ComponentResourceManager resources = new ComponentResourceManager(typeof(MyForm));resources.ApplyResources(myButton, "myButton");resources.ApplyResources(this, "$this");}
請教devexpress的winform界面開發基本步驟
安裝好DevExpress后,開發DevExpress窗體應用的步驟如下:1)利用DevExpress提供的向導模板,建立DevExpress的Winform項目2)建立好項目后,可以看到DevExpress提供的各種窗體控件3)向窗體拖入一個命令按鈕SimpleButton,將其Text屬性修改“關閉”4)鼠標雙擊命令按鈕,編寫后臺代碼using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace DXApplication3
{
public partial class Form1 : DevExpress.XtraEditors.XtraForm
{
public Form1()
{
InitializeComponent();
}
private void simpleButton1_Click(object sender, EventArgs e)
{
// 關閉窗口
this.Close();
}
}
}5)運行,顯示DevExpress風格的窗體。單擊“關閉”可以關閉窗口
c#中兩個數求和界面設計及程序編寫
拖三個Textbox和一個Button雙擊Button,在事件里面添加private void button1_Click(object sender, EventArgs e){ textBox3.Text = (Decimal.Parse(textBox1.Text) + Decimal.Parse(textBox2.Text)).ToString("G");}如滿意請采納,謝謝。
c++和c#哪個做界面更好?
1. C++的代碼錯誤容易引起安全問題,造成內存泄漏,運行出錯。C#的代碼錯誤容易引起性能問題。如果追求性能,用C++,如果追求安全,用C#。 2. C++的開發難度高,開發周期較長,但是運行效率高;C#的開發難度低,開發效率高,運行效率低; 3. C++注重實現功能,只要時間充裕,可以實現非常強大的功能;C#更加注重軟件工程的應用,各種設計模式的使用,面向對象,是現代軟件工程的思想體現。適合企業內高效的開發模式; 4. C++的MFC界面編程難度較高,美化界面需要大量代碼的支持。C#的WPF的界面編程很簡單,界面代碼與程序代碼分開,界面可使用可視化設計程序,如Expression Blend設計。 5. C++對串口,網絡TCP,數據庫方便的編程都支持,但是沒有現成的完整類庫調用,需要大量代碼支持。 C#中這些都已經有類庫,直接調用即可。代碼量少很多。 6. C++打造界面像使用畫筆畫圖,想怎么畫就怎么畫,結果取決于畫家的功力;C#打造界面像使用Photoshop畫圖,不會畫畫的人也能畫出一些精美圖片來。