1. c語言tabcontrol控制項怎麼寫
1、首先創建一個MFC對話框框架,在對話框資源上從工具箱中添加上一個Tab Control 控制項,根據需要修改一下屬性,然後右擊控制項,為這個控制項添加一個變數,
將此控制項跟一個CTabCtrl類變數綁定在一起,這里設為m_tabctrl
2、創建兩個新的對話框資源,其屬性作如下修改:
Border:none //邊界為空,這樣它就沒了標題欄
Style :Child // 這樣這個模板就可以當作另一個窗口的子窗口了。
其它如果沒有必要,就不用改了。
在上面加一些控制項什麼的,具體操作跟普通對話框沒有區別。
完成後從這兩個對話框模板生成兩個新的對話框類。
3、在主對話框.h文件中加入新對話框的頭文件,並為新添加進來的兩個類增加兩個變數:
如:
CTabCtrl m_tabctrl;
CDlgTab1 m_dlgtab1;
CDlgTab2 m_dlgtab2;
4、在主對話框的OnInitDialog()函數中添加如下類似的代碼:
CRect r; //CRect包含用於定義矩形的左上角和右下角點的成員變數
m_tabctrl.GetClientRect(&r);
TCITEM item1;
TCITEM item2;
item1.mask = TCIF_TEXT;
item1.pszText = _T("第一頁");
m_tabctrl.InsertItem(1,&item1);
item2.mask = TCIF_TEXT;
item2.pszText = _T("第二頁");
m_tabctrl.InsertItem(2,&item2);
m_dlgtab1.Create (IDD_DLGTAB1,&m_tabctrl);
m_dlgtab2.Create (IDD_DLGTAB2,&m_tabctrl);
m_dlgtab1.SetWindowPos(NULL,10,30,r.right - 20,r.bottom - 40,SWP_SHOWWINDOW);
m_dlgtab2.SetWindowPos(NULL,10,30,r.right - 20,r.bottom - 40,SWP_HIDEWINDOW);
m_tabctrl.SetCurSel(0);
解釋如下:
兩個InsertItem函數的調用是為了給標簽控制項增加兩個標簽頁面,文本是標題。
SetWindowPos()函數設置這兩個對話框在Z順序中的位置,顯示或隱藏狀態。
5、在主對話中為標簽控制項添加一個標簽選擇改變(TCN_SELCHANGE)的控制項通知消息,以便在用戶選擇標簽時通知主對話框。在主對話框的編輯界面右擊標簽控制項
,選擇添加一個事件可以完成這個操作。
在事件處理中添加如下代碼,如下例:
void CtabdialogDlg::OnSelchangeTimingtab(NMHDR *pNMHDR, LRESULT *pResult)
{
CRect r;
m_tabctrl.GetClientRect (&r);
switch(m_tabctrl.GetCurSel())
{
case 0:
m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW);
m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW );
break;
case 1:
m_mm1.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_HIDEWINDOW);
m_mm2.SetWindowPos (NULL,10,30,r.right -20,r.bottom -40,SWP_SHOWWINDOW );
break;
}
*pResult = 0;
}
要想知道用戶選擇那個標簽頁,要通過m_tabctrl.GetCurSel() 函數。為了不使顯示的子對話框覆蓋標簽控制項的顯示,所以要獲得標簽控制項的尺寸然後設置各頁面的尺寸。
2. visual studio怎麼手動添加工具箱控制項
在你已有的項目的基礎上,點擊「視圖」會出現下面圖片的內容,然後點擊「工具箱」,跳到第2步驟。
出現下圖的內容,但什麼都沒有,跳到第3步驟。
在空白處點擊右鍵,會出現下圖內容,然後點擊「選擇項」,跳到第4步驟。
然後點擊「Silverlight組件」,如果下面方框沒有內容,就跳到第5步驟;如果有內容,就跳到第10步驟
打開電腦的「控制面板」,找到「程序和功能」,點進去,然後跳到第6步驟。
找到安裝好的visual studio,點擊然後再選擇圖中的「更改「,跳到第7步驟。
的一會兒會得到下面界面,選擇」Modify「,跳到第8步驟。
選擇」Windows and Web Developer Tools「下的」Silverlight Developer Kit「然後點擊" Next ",接下來就是等待(關鍵還是看網速),安裝完成之後,跳到第9步驟。
再在工具箱空白處點擊右鍵,選擇」顯示全部「,跳到第10步驟。
下圖看到的就是你想要的」控制項「了。
3. C#中從視圖裡面打開工具箱但是為什麼沒有控制項
ctrl
+
w,x啟動toolbox
暈,你點菜單欄里view-〉toolbox也沒有嗎?
.....
那你這個還真是夠奇怪了,我從2003開始用沒見過這種情況...
4. 我想在軟體中加一個類似於VS工具箱的窗口,c#中有這種控制項嗎
1.可以直接分組的控制項有,treeView
2.像qq一樣的分組:自己用BUTTON或者PANEL寫一個,可以用location貨dock來改變
3.自己寫控制項,其實很簡單的,DOWNLOAD點資料就ok了
4.第三方調用,比如DevComponents
記得給我點分哦!http://www.dotnetmagic.com/downloads/Magic174AndKrypton.zip
還有用NavBarControl這個,下載地址自己找
或者重寫treeview
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace SiteView.Ecc.MMC.UserContorls
{
/// <summary>
/// 繼承TreeView控制項,實現VS工具箱風格
/// </summary>
class ToolBox :TreeView
{
public ToolBox()
{
this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
this.ShowLines = false;
this.HotTracking = true;
this.FullRowSelect = true;
this.DrawMode = TreeViewDrawMode.OwnerDrawAll;
this.Nodes.Add("test");
}
/// <summary>
/// 重新DrawNode方法
/// </summary>
/// <param name="e"></param>
protected override void OnDrawNode(DrawTreeNodeEventArgs e)
{
//base.OnDrawNode(e);
if(e.Node.Level == 0)
{
DrawRoot(e);
}
else
{
DrawItem(e);
}
}
/// <summary>
/// 繪制根節點
/// </summary>
/// <param name="e"></param>
private void DrawRoot(DrawTreeNodeEventArgs e)
{
try
{
Rectangle rect = e.Bounds;
rect.Y += 1;
rect.Width -= 1;
rect.Height -= 3;
if(e.Node.IsSelected)
//if (e.State == TreeNodeStates.Marked || e.State == TreeNodeStates.Selected)
{
using (System.Drawing.Brush selBrush = new System.Drawing.SolidBrush(Color.FromArgb(225, 230, 232)))
using (System.Drawing.Pen outerPen = new System.Drawing.Pen(Color.FromArgb(49, 106, 197)))
{
e.Graphics.FillRectangle(selBrush, rect);
e.Graphics.DrawRectangle(outerPen, rect);
}
}
else
{
using (System.Drawing.Drawing2D.LinearGradientBrush lgBrush = new System.Drawing.Drawing2D.LinearGradientBrush(e.Bounds, Color.FromArgb(221, 220, 203), Color.FromArgb(196, 193, 176), LinearGradientMode.Vertical))
using (System.Drawing.Pen linePen = new System.Drawing.Pen(this.BackColor))
{
e.Graphics.FillRectangle(lgBrush, rect);
e.Graphics.DrawLine(linePen, 0, rect.Bottom - 2, rect.Width, rect.Bottom - 2);
}
}
if (e.Node.IsExpanded == true)
{
//e.Graphics.DrawImage(this.imageList3.Images[0], new Point(rect.Left + 3, rect.Top + 4));
e.Graphics.DrawImage(IconResource.expanded, new Rectangle(rect.Left + 3, rect.Top + 4, 10, 10));
}
else
{
e.Graphics.DrawImage(IconResource.collapsed, new Rectangle(rect.Left + 3, rect.Top + 4, 10, 10));
}
rect.Offset(16, 2);
e.Graphics.DrawString(e.Node.Text, new Font("Microsoft Sans Serif", 8.25F, FontStyle.Bold, GraphicsUnit.Point, ((byte)(0))), SystemBrushes.ControlText, rect.Location);
}
catch (Exception ex)
{
//隱藏錯誤
//log.Error("繪制根節點", ex);
}
}
private System.Drawing.Brush selBrush = new System.Drawing.SolidBrush(Color.FromArgb(175, Color.Gold));
private System.Drawing.Pen pen = SystemPens.HotTrack;
/// <summary>
/// 繪制子結點
/// </summary>
/// <param name="e"></param>
private void DrawItem(DrawTreeNodeEventArgs e)
{
try
{
Rectangle nodeTextRect = e.Bounds;
nodeTextRect.Width -= 1;
nodeTextRect.Height -= 1;
Rectangle rect = e.Bounds;
rect.Inflate(-1, -1);
if (e.Node.IsSelected)
{
e.Graphics.FillRectangle(selBrush, rect);
e.Graphics.DrawRectangle(pen, rect);
}
else
{
e.Graphics.FillRectangle(new System.Drawing.SolidBrush(e.Node.BackColor), e.Bounds);
e.Graphics.DrawRectangle(new System.Drawing.Pen(e.Node.BackColor), e.Bounds);
}
if (this.ImageList != null && e.Node.ImageIndex < this.ImageList.Images.Count)
{
e.Graphics.DrawImage(this.ImageList.Images[e.Node.ImageIndex], new Point(e.Bounds.Left + 3, e.Bounds.Top + 2));
}
nodeTextRect.Offset(20, 3);
e.Graphics.DrawString(e.Node.Text, this.Font, SystemBrushes.ControlText, nodeTextRect.Location);
}
catch (Exception ex)
{
//隱藏錯誤
//log.Error("繪制子節點", ex);
}
}
}
}
還有兩個資源文件,一個加號圖片(IconResource.expanded),一個減號圖片(IconResource.collapsed)。你自己做兩張圖片加進去
5. C#工具箱中如何打開全部控制項
時間控制項在 組件(Components) 這一欄里
6. csharp的控制項在哪
工具箱裡面,Ctrl+w,x 這個是快捷鍵
7. C#工具箱的幾個基本控制項的使用
工具箱,右鍵抄你要添加控制項的襲選項卡,在右鍵菜單里尋選擇項」,如果是自己寫的或者是第三方寫的,「瀏覽」,找到你需要添加的工具包地址,如dll文件之類的,如果是framework內置的就直接在不同的選項卡裡面找
8. 如何實現向Visual Studio的Toolbox添加控制項
早在Visual Studio 2003時代,勇於實踐的前人們在多次嘗試後終於發現,要使用ToolBoxItems.Add方法對Toolbox添加包含控制項的dll,必須念完三條准備咒語:
1. 激活當前ToolboxTab
toolboxTab.Activate();
2. 運行「View.PropertiesWindow」命令
dte.ExecuteCommand(「View.PropertiesWindow「, String.Empty);
3. 選擇第一個控制項(Pointer)
toolboxTab.ToolBoxItems.Item(1).Select();
咒語頌完,法力生效,我們終於可以隨心所欲地使用ToolBoxItems.Add方法了。為什麼必須念那三條咒語呢?筆者沒有研究過。
好了,兩年後,2003的兄弟,2005,法力更加強大,舊的控制項注冊代碼移植過來全部失效。這時,VS Extensibility團隊的高僧站了出來,提供了一段代碼: http//code msdn.microsoft com/vsx/Release/ProjectReleases aspx?ReleaseId=147 代碼的關鍵是…在注冊控制項之前,你必須創建一個」Dummy」的WinForms項目,並且,由於添加項目時的EnvDTE.Solution2.AddFromTemplate方法可能會持續很長一段時間,為了防止程序因停止響應,你需要實現IMessageFilter。然後這個方法怎麼看也像是個偏門。。。總是不優雅。筆者未曾測試過這段代碼。
也許是個補償吧,最後,MS推出了ToolboxControlsInstaller (TCI) - 一個獨立的package,終於提供了一個新的方法解決了Toolbox控制項注冊問題。對於VS 2005,TCI是一個單獨的安裝包,你需要另外下載並安裝(包含在VS 2005 Version 4 SDK里)(http //www microsoft com/downloads/details aspx?familyid=51A5C65B-C020-4E08-8AC0-3EB9C06996F4&displaylang=en);對於VS 2008,它已經被集成在了VisualStudio里邊,不需要額外的安裝。要驗證你的VisualStudio是否安裝了TCI,檢查以下注冊表項即可: HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/9.0/Packages/{2c298b35-07da-45f1-96a3-be55d91c8d7a} (對於2005,把」9.0″換成」8.0″){2c298b35-07da-45f1-96a3-be55d91c8d7a}即是TCI Package的GUID 新的魔法書出來了,自然要研習把玩一番。MS提供了一套VS 2008的SDK,包含了這樣的代碼示例。在這些示例中,大多用到的是MSBuild以及WiX配置來進行程序的編譯,打包成安裝程序,第一次看上去還是有點暈的。在研究了示例提供的WiX配置文件之後,了解到使用TCI注冊Toolbox最核心的口訣是以下幾條:
在你的安裝包中引入Merge Mole - TbxCtrlsInstDefaultItemsCA.msm (在哪裡找到它?{Program Files}/Microsoft Visual Studio 2008 SDK/VisualStudioIntegration/Redistributables)這個msm負責通知TCI有新的控制項安裝到了Toolbox中 - 這樣下一次Visual Studio打開Toolbox的時候,就會自動安裝那些新的ToolboxItem。當然,這個msm所做的事情,也可以自己寫代碼實現 - 但有現成的用又何樂不為呢!VS 2008 SDK: http //www microsoft com/downloads/details.aspx?FamilyID=30402623-93CA-479A-867C-04DC45164F5B&displaylang=en
將待安裝的ToolboxItem寫入注冊表。
對於已在GAC內的控制項Assembly,直接建立這樣一個Key HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/VisualStudio/9.0/ToolboxControlsInstaller/LuxelLab.LabWinControl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=e932685e2a14e8b1, processorArchitecture=MSIL 並為其創建一個無名的String Value - 這個就是Toolbox Tab的名稱。該Assembly下邊的所有Toolbox控制項都會被自動安裝到這個Toolbox Tab下邊。
對於欲從文件系統安裝的控制項,在上一個Key的基礎上,為其添加一個名為」Codebase」的String Value - 代表dll的位置
把」VisualStudio」替換成」VCExpress」,或者」VCSExpress」等等,即可實現為各種Express版本的IDE安裝Toolbox Controls。該方法也適用於 WebControl,WPFControl的安裝
好啦,就那麼簡單,下一次打開IDE的Toolbox時,在一小段」Initializing Toolbox」的功夫之後,安裝的控制項們就出現在工具箱里了(看不到?Show All試試),很可靠,童叟無欺。
9. visual studio 打開工具箱沒有可用的控制項,提示說「將某項拖至此文本可將其添加到工具箱」,應該怎麼辦
1、在你已有的項目的基礎上點擊「工具欄」。