精华内容
下载资源
问答
  • 有渲染菜单和工具栏的源码,添加到项目里后能够直接调用;有能够实现类似IE7上载入时动画功能的自定义类库。
  • 启动第三方程序 方法1: string path = Path . GetDirectoryName ( Assembly . GetExecutingAssembly ( ) . GetName ( ) . CodeBase ) ; //string path = Path.GetDirectoryName(Assembly....

    首先创建一个C#的窗体应用(.net框架):
    在这里插入图片描述
    在左侧隐藏的工具箱中可以添加控件,对自己的窗体做初步的布局。

    这里记录我在做项目的过程中遇到的两个较严重的问题:
    问题1:用重叠的Panel实现界面切换,本来可以简单地靠Panel.BringToFront()或Panel.Visible=true和Panel.Visible=false配合着来实现,但是因为自己在窗体设计界面手动调整Panel的大小,导致控件层级不同,达不到自己想要的效果。
    解决方法:首先在.Designer.cs中找到对应的控件,将其size和location属性设置到相同的合适值,在左侧隐藏的文档大纲中,将这几个重叠的控件拖拽到相同的层级。

    问题2:“System.Runtime.InteropServices.COMException”
    解决方法:解决方案:无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动。
    (1)在开始–》运行中输入services.msc
    (2)找到Windows Management Instrumentation服务
    (3)鼠标右键打开属性,选择启动类型为【自动】,并开启服务即可#

    启动第三方程序

    方法1:

    string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);         
    //string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    //string path = (Directory.GetCurrentDirectory() + "\\stats.exe");获得当前的目录至debug
    //string path_project = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;
    
    Process process=new Process();
    process.StartInfo.FileName = path;//明确路径
    process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized;//加上这句效果更好
    process.StartInfo.UseShellExecute = true;
    process.StartInfo.Arguments = null;
    process.Start();
    
    process.WaitForExit();//等待Excel退出后才能执行以后的步骤
    
    Process.Kill();//程序结束时
    

    方法2:

    this.BeginInvoke(new Action(() => System.Diagnostics.Process.Start(path)));
    

    方法3:

    System.Diagnostics.Process.Start(path);
    

    方法4:利用反射来启动程序:

    Type Excel = Type.GetTypeFromProgID("Excel.Application");//获取Excel.Application的类型
    ExcelObject = Activator.CreateInstance(Excel);//创建spss.Application的类型的实例
    parameter[0] = true;//使用反射动态调用类成员
     // public object InvokeMember(string, BindingFlags, Binder, object, object[]);
    Excel.InvokeMember("Visible", BindingFlags.Static | BindingFlags.SetProperty | BindingFlags.Public, null, ExcelObject, parameter);//执行spss.Application的类型的Visible的方法。
    
    System.Runtime.InteropServices.Marshal.ReleaseComObject(spssObject);
    GC.Collect();
    

    如果想用COM方式来调用excel程序

    添加的引用如:
    在这里插入图片描述
    在这里插入图片描述
    在Form中添加WebBrowser控件。(对象名却省是axWebBrowser1)

    using Excel = Microsoft.Office.Interop.Excel;
    using System.Reflection;
    
     //产生一个Excel.Application的新进程
    Excel.Application app = new Excel.Application();
    if (app == null)
    {
    	progressBar1.Text = "ERROR: EXCEL couldn't be started!";
        return;
    }
    app.Visible = true; //如果只想用程序控制该excel而不想让用户操作时候,可以设置为false
    app.UserControl = true;
    Workbooks workbooks = app.Workbooks;
    _Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet); //根据模板产生新的workbook,或者Add里面加入绝对路径
    Sheets sheets = workbook.Worksheets;
    _Worksheet worksheet = (_Worksheet)sheets.get_Item(1);
    if (worksheet == null)
    {
    	progressBar1.Text = "ERROR: worksheet == null";
        return;
    }
    
    // This paragraph puts the value 5 to the cell G1
    Range range1 = worksheet.get_Range("A1", Missing.Value);
    if (range1 == null)
    {
        progressBar1.Text = "ERROR: range == null";
        return;
    }
    const int nCells = 2345;
    range1.Value2 = nCells;
    
    /*
    * 用WebBrowser“装载”Excel"表,实际上仍然是在新的进程空间中运行Excel.exe
    * WebBrowser控件不支持菜单合并,也就是说无法把Excel表的菜单带入到我们的程序中
    * 幸好提供了可以把工具栏添加进来的功能,通过工具栏可以进行许多Excel专有的操作。
    * 可以通过WebBrowser的方法NavigateComplete提供的事件参数e来访问Excel.Application。
    */
    string strFileName = @"c:/a.xls";
    Object refmissing = System.Reflection.Missing.Value;
    Excel_webBrowser.Navigate(strFileName, ref refmissing, ref refmissing, ref refmissing, ref refmissing);
    //下面这句可以将excel本身的工具调添加进来
    Excel_webBrowser.ExecWB(SHDocVw.OLECMDID.OLECMDID_HIDETOOLBARS, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref refmissing, ref refmissing);
    
    /*
    * 首先需要明白,用WebBrowser“装载”Excel"表,实际上仍然是在新的进程空间中运行Excel.exe。
    * 可以用任务管理器观察。因此,只要我们能够获取Excel.Application对象,就能像上文一中所说的那样操作Excel数据。
    * 幸好可以通过WebBrowser的方法NavigateComplete提供的事件参数e来访问Excel.Application。 
    */
    
    public void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
    {
         Object o = e.pDisp;
         Object oDocument = o.GetType().InvokeMember("Document", BindingFlags.GetProperty, null, o, null);
          Object oApplication = o.GetType().InvokeMember("Application", BindingFlags.GetProperty, null, oDocument, null);
          //Object oName = o.GetType().InvokeMember("Name",BindingFlags.GetProperty ,null,oApplication,null); 
          //由于打开的是excel文件,所以这里的oApplication 其实就是Excel.Application
          Excel.Application eApp = (Excel.Application)oApplication;//这样就可以象上文中所述来操作Excel了。
    }
    
    /*
    * 包含该webbrowser的form退出时候,如何确保excel进程也退出?(参见microsoft帮助中心kb317109)
    * 由于WebBrowser只不过是对Excel表的浏览,而Excel在单独的进程中运行。
    * 所以要保证对该Excel对象eApp及其相应的所有成员变量都释放引用,才能保证在Form退出时excel进程跟着退出。
    * 这一点在一个程序需要多次打开关闭excel表时尤为重要。 
    */
    Excel.Application oApp;
    Excel.Workbooks oBooks;
    Excel.Workbook oBook;
    Excel.Worksheet oSheet;
    
    private void ExcelExit()
    {
         NAR(oSheet);
         oBook.Close(False);
         NAR(oBook);
         NAR(oBooks);
         oApp.Quit();
         NAR(oApp);
         
         Debug.WriteLine("Sleeping...");
         System.Threading.Thread.Sleep(5000);
         Debug.WriteLine("End Excel");
    }
    private void NAR(Object o)
    {
    	try { System.Runtime.InteropServices.Marshal.ReleaseComObject(o); }
        catch { }
        finally { o = null; }
    }
    
    /*
    * 经过试验,我发现除了释放这些变量以外,必须把该axWebBroswer1也销毁掉,Excel进程才退出。
    * 否则的话,即使让axWebBroser1去Navigate空内容"about:blank", excel进程仍然不会退出。
    * 因此应该将axWebBroser1所在的Form关闭掉,或者直接调用axWebBrowser1.Dispose();
    * 如果还是其它问题导致不能正常退出,就只有调用垃圾回收了。
    */
    GC.Collect();
    

    有关桌面快捷方式的操作

    一、在项目中添加“Windows Script Host Object Model”的引用
    在项目上单击右键,选择“添加引用”,在“添加引用”对话框中选择“COM”组件选项卡,然后单击选择“Windows Script Host Object Model”,最后确定。在项目中就会出现“IWshRuntimeLibrary”,下面就可以编写代码了。

     //需要引入IWshRuntimeLibrary,搜索Windows Script Host Object Model
    
            /// <summary>
            /// 创建快捷方式
            /// </summary>
            /// <param name="directory">快捷方式所处的文件夹</param>
            /// <param name="shortcutName">快捷方式名称</param>
            /// <param name="targetPath">目标路径</param>
            /// <param name="description">描述</param>
            /// <param name="iconLocation">图标路径,格式为"可执行文件或DLL路径, 图标编号",
            /// 例如System.Environment.SystemDirectory + "\\" + "shell32.dll, 165"</param>
            /// <remarks></remarks>
            public static void CreateShortcut(string directory, string shortcutName, string targetPath,string description = null, string iconLocation = null)
            {
                if (!System.IO.Directory.Exists(directory))
                {
                    System.IO.Directory.CreateDirectory(directory);
                }
    
                string shortcutPath = Path.Combine(directory, string.Format("{0}.lnk", shortcutName));
                WshShell shell = new WshShell();
                IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutPath);//创建快捷方式对象
                Console.WriteLine("要创建的快捷方式地址:" + shortcutPath);
    
                shortcut.TargetPath = targetPath;//指定目标路径
                shortcut.WorkingDirectory = Path.GetDirectoryName(targetPath);//设置起始位置
                Console.WriteLine("TargetPath:" + shortcut.TargetPath);
                Console.WriteLine("WorkingDirectory:" + shortcut.WorkingDirectory);
                //shortcut.Arguments = shortcut.WorkingDirectory;
                shortcut.WindowStyle = 1;//设置运行方式,默认为常规窗口
                shortcut.Description = description;//靠近时的备注
                shortcut.Hotkey = "CTRL+SHIFT+E";//全局热键
                shortcut.IconLocation = string.IsNullOrWhiteSpace(iconLocation) ? targetPath : iconLocation;//设置图标路径
                shortcut.Save();//保存快捷方式
            }
    
            public static void CreateShortcutOnDesktop(string shortcutName, string targetPath,string description = null, string iconLocation = null)
            {
                string desktop = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);//获取桌面文件夹路径
                CreateShortcut(desktop, shortcutName, targetPath, description, iconLocation);
            }
            public static string getShortCutPath(string path)
            {
                //获取当前桌面的路径
                string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
                //string strDesktopPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory),"xx.lnk");
    
                string filePath = "";
                filePath = dir + path;
                Console.WriteLine("要查找的快捷方式地址:" + filePath);
    
                if (System.IO.File.Exists(filePath))
                {
                    //声明操作对象
                    IWshRuntimeLibrary.WshShell shell = new IWshRuntimeLibrary.WshShell();
                    //创建快捷方式
                    IWshRuntimeLibrary.IWshShortcut quickPath = (IWshRuntimeLibrary.IWshShortcut)shell.CreateShortcut(filePath);
    
    
                    //快捷方式文件指向的路径:TargetPath;
                    //快捷方式文件指向的目标目录:WorkingDirectory;
                    Console.WriteLine("目标地址:" + quickPath.WorkingDirectory);
                    return quickPath.WorkingDirectory;
                }
                else
                {
                    return "";
                }
            }
    

    判断某一路径下的文件是否存在

    if (!File.Exists(path))
    {
    		MessageBox.Show("文件不存在!");
    }
    

    窗体句柄

    非.NET程序,一旦程序被生成,控件ID就是固定的,但在.NET程序中控件ID是动态变化的,所以想考ID号来找到对应的窗口是不现实的。

    使用spy++工具,可以方便地找到每一个窗口对应的窗体信息,如“名称”、“类”、“句柄”等。
    在开发过程中遇到一个很大的坑,一开始对这些概念不是很清楚,疯狂想通过直接调用Win32 API来获取窗体和窗体子控件的句柄,从而进行操作。
    查阅资料有说法说一些窗体是画出来的,没用标准的菜单栏和按钮等,这些空间找不到句柄,自然FindWindEx函数也就不管用了,不管怎么遍历都无法得到子控件的句柄,在此衷心提示在想要找句柄时,不妨先用spy++,看看你想要的句柄是否存在。

    首先对对API函数实行托管:

    using System.Runtime.InteropServices;
    
    [DllImport("User32.dll", EntryPoint = "SendMessage")]
    public static extern int SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, string lParam);
    
    [DllImport("user32.dll")]
    public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
    
    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
    [DllImport("user32.dll")]
    public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
    
    [DllImport("user32.dll")]
    public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
    
    [DllImport("user32.dll", CharSet = CharSet.Auto)]
    public extern static IntPtr SetParent(IntPtr hChild, IntPtr hParent);
    
    [DllImport("user32.dll")]
    public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndlnsertAfter, int X, int Y, int cx, int cy, uint Flags);
    
    [DllImport("user32.dll", EntryPoint = "ShowWindow")]
    public static extern int ShowWindow(IntPtr hwnd, int nCmdShow);
    
    [DllImport("user32.dll", SetLastError = true)]
    public static extern bool MoveWindow(IntPtr hwnd, int x, int y, int cx, int cy, bool repaint);
    
    //当一个窗口或应用程序要关闭时发送一个信号   
    public const int WM_CLOSE = 0x10;
    //按下某键,并已发出WM_KEYDOWN, WM_KEYUP消息   
    const int WM_CHAR = 0x102;
    //得到窗口风格
    public static int GWL_STYLE = -16;
    public static int WS_THICKFRAME = 262144;
    public static int WS_BORDER = 8388608;
    public static int SW_SHOWNORMAL = 1;
    public static int SW_RESTORE = 9;
    public static int SW_SHOWNOACTIVATE = 4;
    
    IntPtr Wnd=new IntPtr(0);
    do
    {
    	try
        {
        	Thread.Sleep(100);
            Wnd = FindWindow(null, "工作簿1 - Excel");
        }
        catch (Exception ex)
        {
             System.GC.Collect();
        }
    } while (Wnd == IntPtr.Zero);
    
    //在panel上显示句柄
    Int32 wndStyle = GetWindowLong(Wnd, GWL_STYLE);
    wndStyle &= ~WS_BORDER;
    wndStyle &= ~WS_THICKFRAME;
    SetWindowLong(Wnd, GWL_STYLE, wndStyle);
    SetParent(Wnd, this.Panel1.Handle);
    SetWindowPos(Wnd, new IntPtr(0), 0, 0, this.Panel1.Width, this.Panel1, 1);
    //ShowWindow(Wnd, SW_RESTORE);
    ShowWindow(Wnd, (int)ProcessWindowStyle.Maximized);
    
    //关闭窗口
    SendMessage(Wnd, WM_CLOSE, 0, 0);
    
    //获取测试程序的窗体句柄
    IntPtr mainWnd = FindWindow(null, "EXCEL");//返回0
    List<IntPtr> listWnd = new List<IntPtr>();
    //获取窗体上OK按钮的句柄 
    IntPtr hwnd_button = FindWindowEx(mainWnd, new IntPtr(0), null, "OK");
    //获取窗体上所有控件的句柄
    //EnumChildWindows可以枚举一个父窗口的所有子窗口:
    EnumChildWindows(mainWnd, new CallBack(delegate (IntPtr hwnd, int lParam)
    {
    	listWnd.Add(hwnd);
    	return true;
    }), 0);
    foreach (IntPtr item in listWnd)
    {
    	if (item != hwnd_button)
        {
        	char[] UserChar = "luminji".ToCharArray();
            foreach (char ch in UserChar)
            {
            	SendChar(item, ch, 100);
            }
        }
    }
    SendMessage(hwnd_button, WM_CLICK, mainWnd, "0");
    public void SendChar(IntPtr hand, char ch, int SleepTime)
    {
    	PostMessage(hand, WM_CHAR, ch, 0);//在文本输入的控件上写入内容
    	System.Threading.Thread.Sleep(SleepTime);
    }
    
    /// <summary>
            /// 查找窗体上控件句柄
            /// </summary>
            /// <param name="hwnd">父窗体句柄</param>
            /// <param name="lpszWindow">控件标题(Text)</param>
            /// <param name="bChild">设定是否在子窗体中查找</param>
            /// <returns>控件句柄,没找到返回IntPtr.Zero</returns>
            private IntPtr FindWindowEx(IntPtr hwnd, string lpszWindow, string classWindow, bool bChild)
            {
                IntPtr iResult = IntPtr.Zero;
                // 首先在父窗体上查找控件
                iResult = OperateHandle.FindWindowEx(hwnd, 0, classWindow, lpszWindow);
                // 如果找到直接返回控件句柄
                if (iResult != IntPtr.Zero) return iResult;
    
                // 如果设定了不在子窗体中查找
                if (!bChild) return iResult;
    
                // 枚举子窗体,查找控件句柄
                int i = OperateHandle.EnumChildWindows(
                hwnd,
                (h, l) =>
                {
                    Console.WriteLine("找几次");
                    IntPtr f1 = OperateHandle.FindWindowEx(h, 0, classWindow, lpszWindow);
                    if (f1 == IntPtr.Zero)
                        return true;
                    else
                    {
                        iResult = f1;
                        return false;
                    }
                },
                0);
                // 返回查找结果
                return iResult;
            }
    
    private void excelShow_panel_SizeChanged(object sender, EventArgs e)
    {
         if (this.Process == null)
         {
              return;
         }
         if (this.Process.MainWindowHandle != IntPtr.Zero)
         {
          	MoveWindow(this.Process.MainWindowHandle, 0, 0, this.Panel.Width, this.Panel.Height, true);
         }
    }
    

    另一种Excel嵌入的方法

    using Office = Microsoft.Office.Core;
    using Excel = Microsoft.Office.Interop.Excel;
    
    //声明变量
    		Office.CommandBarButton oButton;
    	 	Office.CommandBarComboBox oEdit;
    		Office.CommandBarComboBox oDrop;
    		Office.CommandBarComboBox oCombo;
    		Office.CommandBarButton oPopupButton;
    
    		Excel.Application oExcel;
    		Office.CommandBar oCommandBar;
    		Office.CommandBarPopup oPopup;
    		Object oMissing = System.Reflection.Missing.Value;
    
    		// Start Excel.
    		oExcel = new Excel.Application();
    		// Show Excel and set UserControl
    		//oExcel.Width = this.Width;
    		//oExcel.Height = this.Height;
    		//oExcel.Left = this.Left;
    		//oExcel.Top = this.Top;
    
    		oExcel.Visible = true;
    		oExcel.UserControl = true;
                
    		// Add a new workbook
    		oExcel.Workbooks.Add(oMissing);
    
    		// Create a new command bar.
    		oCommandBar = oExcel.CommandBars.Add("Billiards Sample", oMissing, oMissing);
    
    		// Add a button to the command bar.
    		oButton = (Office.CommandBarButton)oCommandBar.Controls.Add(
    		Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, oMissing);
    
    		// Set the caption and face ID.
    		oButton.Caption = "New game";
    		oButton.FaceId = 1845;
    	// Set up a delegate for the Click event.
    		Office._CommandBarButtonEvents_ClickEventHandler oButtonHandler =new Office._CommandBarButtonEvents_ClickEventHandler(oButton_Click);
    		oButton.Click += oButtonHandler;
    
    		// Add an edit box to the command bar.
    		oEdit = (Office.CommandBarComboBox)oCommandBar.Controls.Add(
    		Office.MsoControlType.msoControlEdit, oMissing, oMissing, oMissing, oMissing);
    		// Show a vertical separator.
    		oEdit.BeginGroup = true;
    		// Clear the text and show a caption.
        	oEdit.Text = "";
        	oEdit.Caption = "Enter your name:";
        	oEdit.Style = Office.MsoComboStyle.msoComboLabel;
        	// Set up a delegate for the Change event.
        	Office._CommandBarComboBoxEvents_ChangeEventHandler oEditHandler = new Office._CommandBarComboBoxEvents_ChangeEventHandler(oEdit_Change);
        	oEdit.Change += oEditHandler;
    
        	// Add a combo box to the command bar.
         	oCombo = (Office.CommandBarComboBox)oCommandBar.Controls.Add(
         	Office.MsoControlType.msoControlComboBox, oMissing, oMissing, oMissing, oMissing);
                // Add items to the combo box.
                oCombo.AddItem("Sharky", oMissing);
                oCombo.AddItem("Cash", oMissing);
                oCombo.AddItem("Lucky", oMissing);
                // Set the caption and style.
                oCombo.Caption = "Choose your opponent:";
                oCombo.Style = Office.MsoComboStyle.msoComboLabel;
                // Set up a delegate for the Change event.
    
                Office._CommandBarComboBoxEvents_ChangeEventHandler oComboHandler =
                        new Office._CommandBarComboBoxEvents_ChangeEventHandler(oCombo_Change);
                oCombo.Change += oComboHandler;
    
                // Add a drop-down list box to the command bar.
                oDrop = (Office.CommandBarComboBox)oCommandBar.Controls.Add(
                        Office.MsoControlType.msoControlDropdown, oMissing, oMissing, oMissing, oMissing);
                // Add items to the list box.
                oDrop.AddItem("8 Ball", oMissing);
                oDrop.AddItem("9 Ball", oMissing);
                oDrop.AddItem("Straight Pool", oMissing);
                oDrop.AddItem("Bowlliards", oMissing);
                oDrop.AddItem("Snooker", oMissing);
                // Set the value to the first in the list.
                oDrop.ListIndex = 1;
                // Set the caption and style.
                oDrop.Caption = "Choose your game:";
                oDrop.Style = Office.MsoComboStyle.msoComboLabel;
                // Set up a delegate for the Change event.
                Office._CommandBarComboBoxEvents_ChangeEventHandler oDropHandler =
                        new Office._CommandBarComboBoxEvents_ChangeEventHandler(oDrop_Change);
                oDrop.Change += oDropHandler;
    
                // Add a pop-up menu to the command bar.
                oPopup = (Office.CommandBarPopup)oCommandBar.Controls.Add(
                        Office.MsoControlType.msoControlPopup, oMissing, oMissing, oMissing, oMissing);
                // Add a separator before the pop-up button.
                oPopup.BeginGroup = true;
                // Set the caption.
                oPopup.Caption = "Rack 'em Up!";
                // Add a button to the pop-up.
                oPopupButton = (Office.CommandBarButton)oPopup.CommandBar.Controls.Add(
                        Office.MsoControlType.msoControlButton, oMissing, oMissing, oMissing, oMissing);
                // Change the face ID and caption for the button.
                oPopupButton.FaceId = 643;
                oPopupButton.Caption = "Break!";
                // Set up a delegate for the Click event.
                Office._CommandBarButtonEvents_ClickEventHandler oPopupButtonHandler =
                        new Office._CommandBarButtonEvents_ClickEventHandler(oPopupButton_Click);
                oPopupButton.Click += oPopupButtonHandler;
    
                // Show the command bar to the user.
                oCommandBar.Visible = true;
            }
            private void oButton_Click(Office.CommandBarButton Ctrl, ref bool Cancel)
            {
                // Reset all values.
                oEdit.Text = "";
                oDrop.ListIndex = 1;
                oCombo.Text = "";
                Console.WriteLine("New game button clicked");
            }
    
            private void oEdit_Change(Office.CommandBarComboBox Ctrl)
            {
                Console.WriteLine("oEdit_Change event fired -- Player's name = " + Ctrl.Text);
            }
    
            private void oCombo_Change(Office.CommandBarComboBox Ctrl)
            {
                Console.WriteLine("oCombo_Change event fired -- New opponent = " + Ctrl.Text);
            }
    
            private void oDrop_Change(Office.CommandBarComboBox Ctrl)
            {
                Console.WriteLine("oDrop_Change event fired -- Game type = " + Ctrl.Text);
            }
    
            private void oPopupButton_Click(Office.CommandBarButton Ctrl, ref bool Cancel)
            {
                System.Random oRand;
    
                Console.WriteLine("oPopupButton_Click event fired");
                // Create a new random number class.
                oRand = new System.Random();
                String sWinner;
                // Get a random number and check its range.
                if (oRand.NextDouble() > 0.5)
                    sWinner = oEdit.Text;
                else
                    sWinner = oCombo.Text;
                // Show a message box to the user.
                MessageBox.Show("Game: " + oDrop.Text + "\r\n\r\nName: " + oEdit.Text +
                    "\r\nOpponent: " + oCombo.Text + "\r\n\r\nWinner: " + sWinner, "Game Results");
            }
    

    控件的Location.X、Location.Y、Left、Top是相对于控件的父控件而言的

    句柄

    //使用方法
            //控件函数.窗口拖动(this.button1,this);
            //控件函数.控件拖动(this.button2);
            [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, uint wParam, uint lParam);
            [DllImport("user32.dll")]
            private static extern IntPtr WindowFromPoint(Point p);   //根据坐标点获取句柄
            [DllImport("user32.dll")]
            private static extern int GetWindowText(IntPtr hwnd, StringBuilder lpString, int nMaxCount);  //获取窗口标题
            [DllImport("user32.dll")]
            private static extern void GetClassName(IntPtr hwnd, StringBuilder s, int nMaxCount);   //获取句柄类名
            [DllImport("user32.dll")]
            private static extern IntPtr GetParent(IntPtr hwnd);   //获取句柄父句柄
            [DllImport("user32.dll")]
            private static extern IntPtr SetParent(IntPtr hwnd, IntPtr cwnd);  //设置父句柄
            [DllImport("user32.dll")]
            private static extern bool GetWindowRect(IntPtr hwnd, ref RECT lpRECT);   //获取句柄矩形位置信息
    
            [StructLayout(LayoutKind.Sequential)]
            public struct handleInfoStructor
            {
                public Rectangle location;
                public string showPassw;
                public string className;
                public List<IntPtr> fatherFormHandle;
                public List<string> fatherFormTitle;
                public List<string> fatherFormClassName;
            }
            [StructLayout(LayoutKind.Sequential)]
            public struct RECT
            {
                public int Left;
                public int Top;
                public int Right;
                public int Bottom;
            }
            public static handleInfoStructor getHandleInfo(IntPtr hd)
            {
                handleInfoStructor xinxi = new handleInfoStructor();
                xinxi.fatherFormHandle = new List<IntPtr>();
                xinxi.fatherFormTitle = new List<string>();
                xinxi.fatherFormClassName = new List<string>();
                RECT weizhi = new RECT();
                GetWindowRect(hd, ref weizhi);
                xinxi.location.X = weizhi.Left;
                xinxi.location.Y = weizhi.Top;
                xinxi.location.Width = weizhi.Right - weizhi.Left;
                xinxi.location.Height = weizhi.Bottom - weizhi.Top;
                StringBuilder s = new StringBuilder(512);
                GetWindowText(hd, s, s.Capacity);
                xinxi.showPassw = s.ToString();
                GetClassName(hd, s, s.Capacity);
                xinxi.className = s.ToString();
    
                IntPtr f1 = GetParent(hd);
                IntPtr h;
                while (f1 != IntPtr.Zero)
                {
                    xinxi.fatherFormHandle.Add(f1);
                    StringBuilder s1 = new StringBuilder(512);
                    GetWindowText(f1, s1, s1.Capacity);
                    xinxi.fatherFormTitle.Add(s1.ToString());
                    GetClassName(f1, s1, s1.Capacity);
                    xinxi.fatherFormClassName.Add(s1.ToString());
                    h = f1;
                    f1 = GetParent(h);
                }
                return xinxi;
            }
    
            [DllImport("user32.dll")]
            private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
    
            //hwndparent为0表示桌面为父,hwndchildafter为null表示从第一个开始,lpwindowname为null表示步匹配该项
            [DllImport("user32.dll")]
            private static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpClassName, string lpWindowName);
            //查找控件句柄
            public static IntPtr findview(IntPtr parent, string classname, string text)
            {
                IntPtr hwndtemp = FindWindowEx(parent, IntPtr.Zero, classname, text);
                if (hwndtemp == IntPtr.Zero)
                {
                    List<IntPtr> allchild = findallchild(parent);
                    for (int i = 0; i < allchild.Count; i++)
                    {
                        handleInfoStructor ju = getHandleInfo(allchild[i]);
                        if (ju.className == classname && ju.showPassw == text)
                        {
                            return allchild[i];
                        }
                    }
                }
                return hwndtemp;
            }
    
            //查找一级子控件hd
            public static List<IntPtr> findchild(IntPtr parent)
            {
                List<IntPtr> allchild = new List<IntPtr>();
                IntPtr hwnd = FindWindowEx(parent, IntPtr.Zero, null, null);
                while (hwnd != IntPtr.Zero)
                {
                    allchild.Add(hwnd);
                    hwnd = FindWindowEx(parent, hwnd, null, null);
                }
                return allchild;
            }
            //查找所有子控件-广度遍历
            public static List<IntPtr> findallchild(IntPtr parent)
            {
                List<IntPtr> allchild = new List<IntPtr>();
                allchild.Add(parent);   //第一个添加父句柄,最后再删除
                for (int i = 0; i < allchild.Count; i++)
                {
                    IntPtr patenttemp = allchild[i];
                    IntPtr hwnd = FindWindowEx(patenttemp, IntPtr.Zero, null, null);
                    while (hwnd != IntPtr.Zero)
                    {
                        allchild.Add(hwnd);
                        hwnd = FindWindowEx(patenttemp, hwnd, null, null);
                    }
                }
                allchild.RemoveAt(0);
                return allchild;
            }
    
            //查找窗口
            public static IntPtr findform(string classname, string windowname)
            {
                IntPtr hwnd = FindWindow(classname, windowname);
                return hwnd;
            }
    

    获得当前窗口的大小

    获取窗口大小及位置:需要调用方法GetWindowRect(IntPtr hWnd, ref RECT lpRect)
    
            [DllImport("user32.dll")]
            [return: MarshalAs(UnmanagedType.Bool)]
            static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);
    
            [StructLayout(LayoutKind.Sequential)]
            public struct RECT
            {
                public int Left;                             //最左坐标
                public int Top;                             //最上坐标
                public int Right;                           //最右坐标
                public int Bottom;                        //最下坐标
            }
    
    示例:
    
                        InPtr awin = GetForegroundWindow();    //获取当前窗口句柄
                        RECT rect = new RECT();
                        GetWindowRect(awin, ref rect);
                       int width = rc.Right - rc.Left;                        //窗口的宽度
                       int height = rc.Bottom - rc.Top;                   //窗口的高度
                        int x = rc.Left;                                             
                        int y = rc.Top;
    

    Excel嵌入

    	Microsoft.Office.Interop.Excel.Application excel_H = new Microsoft.Office.Interop.Excel.Application();
    
        excel_H.CommandBars[1].Enabled = false;
        excel_H.CommandBars["Standard"].Visible = false;
        excel_H.CommandBars["Formatting"].Visible = false;
        excel_H.DisplayFormulaBar = false;
        IntPtr hwnd = (IntPtr)excel_H.Hwnd;
        try
        {
        	excel_H.Width = this.Width;
            excel_H.Height = this.Height;
    
            excel_H.Left = 0;
            excel_H.Top = 0;
         }
         catch (COMException ex) { }
    
         excel_H.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlNormal;
         SetParent(hwnd, this.show_panel.Handle);
         excel_H.Visible = true;
         excel_H.Workbooks.Close();
         excel_H.Quit();
         System.Runtime.InteropServices.Marshal.ReleaseComObject(excel_H);
    
    展开全文
  • C# winform TreeView树形菜单控件DEMO附配套数据库文件 【VS2008】+【SQL Sever 2005】 温馨提示:下载完了回复一下就能把分数再赚回去哟~
  • 打印库允许您将...获取工具下载 - DevExpress WinForm v21.1 提示:请注意,XtraPrinting 库无法将某些控件导出为特定格式,但是所有控件都可以导出为 PDF 或图像格式。 使用Print Preview窗口导出 您可以.

    打印库允许您将DevExpress .NET控件导出为各种文档格式(PDF、HTML、MHT、TXT、CSV、XLS、RTF)和图像格式(BMP、JPEG、GIF、TIFF、PNG、EMF),本文演示如何使用Print Preview窗口和代码将控件导出为PDF格式。

    获取工具下载 - DevExpress WinForm v21.1

    提示:请注意,XtraPrinting 库无法将某些控件导出为特定格式,但是所有控件都可以导出为 PDF 或图像格式。

    使用Print Preview窗口导出

    您可以使用Print Preview窗口将可打印控件导出为可用格式。

    使用控件的 ShowPrintPreview 方法显示此窗口,下图说明了网格控件的打印预览窗口。

    DevExpress WinForm控件入门指南:使用XtraPrinting库以各种格式导出控件

    Print Preview表单顶部的工具栏显示Export Document… 按钮,单击此按钮可显示一个下拉菜单,您可以从中选择所需的导出文件格式。

    DevExpress WinForm控件入门指南:使用XtraPrinting库以各种格式导出控件

    要将页面或报表标题添加到报表中,请使用可打印链接(PrintableComponentLink)生成报表。

    代码导出

    以下代码演示了如何使用 XtraPrinting 库方法在代码中将控件导出到 PDF 文件,而无需打印预览窗口。 控件 (XtraGrid) 通过 PrintingSystemBase.ExportToPdf方法导出为 PDF。

    C#

    using DevExpress.XtraPrinting;
    
    // Create a PrintingSystem component.
    DevExpress.XtraPrinting.PrintingSystem ps = new DevExpress.XtraPrinting.PrintingSystem();
    
    // Create a link that will print a control.
    DevExpress.XtraPrinting.PrintableComponentLink link = new PrintableComponentLink(ps);
    
    // Specify the control to be printed.
    link.Component = gridControl1;
    
    // Generate a report.
    link.CreateDocument();
    
    // Export the report to a PDF file.
    string filePath = @"c:\gridcontrol.pdf";
    link.PrintingSystem.ExportToPdf(filePath);
    
    System.Diagnostics.Process process = new System.Diagnostics.Process();
    process.StartInfo.FileName = filePath;
    process.Start();
    

    VB.NET

    Imports DevExpress.XtraPrinting
    
    ' Create a PrintingSystem component.
    Dim ps As New DevExpress.XtraPrinting.PrintingSystem()
    
    ' Create a link that will print a control.
    Dim link As New DevExpress.XtraPrinting.PrintableComponentLink(ps)
    
    ' Specify the control to be printed.
    link.Component = gridControl1
    
    ' Generate a report.
    link.CreateDocument()
    
    ' Export a report to a PDF file.
    Dim filePath As String = "c:\gridcontrol.pdf"
    link.PrintingSystem.ExportToPdf(filePath)
    
    Dim process As New System.Diagnostics.Process()
    process.StartInfo.FileName = filePath
    process.Start()
    

    DevExpress WinForm | 下载试用

    DevExpress WinForm拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!


    DevExpress技术交流群4:715863792      欢迎一起进群讨论

    更多DevExpress线上公开课、中文教程资讯请上中文网获取

    展开全文
  • 一次打开解决方案后,需要先生成控件库 BSE.Windows.Forms.dll ,否则演示窗体 Form1.cs 不能被打开 (3)在启动调试前,请把 BSE.Windows.Test 项目设置为启动项目 (4) 请注意:在使用 RightToLeft 功能时,在...

    转自:http://www.cnblogs.com/peterzb/archive/2009/06/21/1507880.html 

     

    1. 仿office 2007的Ribbon风格面板(该控件模仿office 2007的Ribbon风格,显示操作面板。)

    2. .NET中最全功能的表格控件

    [翻译]

    Mathew Hall.著XPTable - .NET ListView meets Java's JTable


    [简介]

    由于项目需要,我需要定制一个ListView,它必须能够在列中插入图像、下拉框、可上下调整的数字、进度条等等。由于已经有了一个Java下的背景,我将简单地基于那个JTable封装。


    [功能]

    全定制可视化界面
    支持XP风格
    轻易添加再定制的控件
    可隐藏列
    行、列、单元可以被Disable
    每个单元、列可以有Tooltip
    等等……


    [XPTable]

    XPTable包含下面的组件:
    1. Table,
    2. ColumnModel 和它的 Columns,
    3. TableModel 和它的 Row 和 Cell,
    4. Renderer
    5. Editor

    3.OpenTheme一个开源的用户图形界面(GUI)工具包

    [翻译]

    weiqj.著OpenTheme : An open source graphic user interface (GUI) toolkit

    [简介]

    OpenTheme是一个基于XML的GUI工具包,它包括一系列基础类和WYSIWYG 编辑器。尽管,它最初的设计是用于全屏GUI的,不过完全适用Windows用户界面。

    另外,我给大家准备了一个完全的入门教程

    image

    4.一个XP和Vista风格的Outlook工具栏控件

    [翻译]
    Jan Geerinckx著Rich OutlookBar in XP and Vista style


    Outlook工具栏控件


    [开发环境]
    VB
    .NET

    [简介]
    本文中的控件将实现一个XP和Vista风格的Outlook工具栏控件。

    [基本结构]

    控件中有三个类:

    OutlookBarButton类
    该类实现了单个的Button实例,其中绘图不包括在这里。
    基本成员如下:
    Text:如果按钮作为大的按钮显示的时候,文字会显示在上面。如果,按钮显示在最下方,作为小的按钮显示,这些文字会作为Tooltip显示。
    Visible:指示按钮是否可见,可以在运行过程中,动态地设置。
    Allowed:当设置为False时,这个按钮不可见。在运行的时候,你不可以访问它,可以阻止特定的用户只允许访问特定按钮。
    Image:显示在按钮上的图片。最好是24x24或更大的图标。
    Rectangle:只在assembly可设。

    OutlookBarButtonCollection类

    它继承于CollectionBase,是上述Button的集合。

     

    5.使用Vista风格的控件.NET 2.0控件

    翻译

    Pedro M. C. Cardoso著Vista Controls

    简介

    Vista控件集(Vista Controls)是一个于微软Windows Vista操作系统下提供新样式控件的一个库。

    如果你在.NET 2.0的应用程序中使用了 System.Windows.Forms程序集中的树状图Treeview,列表视图Listview, 打开文件对话框OpenFileDialog, 保存文件对话框SaveFileDialog 和目录浏览对话框FolderBrowserDialog,当你的程序运行于Vista下面的时候,你会发现你的程序风格并没有任何变化,并没有自动调用新的Vista界面风格,还是以前的Windows XP的风格。

    在Vista Controls中,你将发现有五个代替的类,它们将使得运行在Vista下面的程序看上去是Vista的样子,而如果你在早期的Windows系统中使用这些程序时,还是以前的风格。这就给你减轻了很大的工作量,很容易你的程序就可以同时适应Vista和以前版本Windows了。

    另外,Vista控件集包括了一个新加入Vista的控件:Command Link。因为这个控件在早期的Windows中并不存在,所以当程序运行在这些Windows系统中时,它会模仿Vista风格。

     

    常规对话框

    打开文件,保存文件和打开目录对话框

     

    6.面板控件库 XPanderControls


    面板控件库 XPanderControls
    作者: Uwe Eichkorn.
    翻译: [yn]Yuxiang

    本文介绍一个可对子控件分组的可扩展面板控件库的使用。
    C# (C# 2.0)
    Windows (Win2K, WinXP, Vista), .NET (.NET 2.0)
    Win32, VS (VS2005)
    Dev
    发表日期: 2007-4-13
    更新日期: 2007-9-29 

    下载源代码和演示文件(http://www.codeproject.com/useritems/XPanderControls/xpandercontrols.zip) - 177.8 KB

     原文:XPanderControls

    译者注:(另外,限于篇幅,译文的大部分插图没有贴上来,请下载译文查看)
    (1)在解压缩源代码后,建议把源码文件的只读属性取消,避免在保存时出现警告对话框
    (2)在第一次打开解决方案后,需要先生成控件库 BSE.Windows.Forms.dll,否则演示窗体 Form1.cs 不能被打开
    (3)在启动调试前,请把 BSE.Windows.Test 项目设置为启动项目
    (4)
    请注意:在使用 RightToLeft 功能时,在运行时刻,会产生错误(imageList2 控件初始,请参阅下面的相关说明),请关注作者的更新

    简介

    XPander 控件库提供了把多个用户控件放置在单个容器中的机制。可以随意地显示或隐藏它。 Xpander 控件追随 MS Outlook 的视觉风格。所有控件都支持可视化设计器、智能标记和 RightToLeft 功能。面板的使用与 toolstripenders 相关联,可形成有趣的视觉效果。

    面板风格(Panel styles)

    在演示项目中,面板的风格可以通过在 tooltrip 中的组合框进行更改。

    水溶效果(Aqua effects)

    Office2007 效果(Office2007 effects)

    在可视化设计器中,面板颜色和属性都是可以定制和改变的。

     

    RightToLeft 属性值被设置为 RightToLeft.Yes 时,控件元素的水平对齐方式就改变为从右向左。

     

    7.Office 2007 Ribbon 风格的按钮和菜单[转载]

    翻译

    Juan Pablo G.C.著Improved and Recoded RibbonMenuButton

    简介

    首先,感谢大家。我非常感谢大家对本文的努力给与了高度的评价。我记得当我16岁的那年,我见到了各种各样的软件、应用程序和游戏,而对于我来说,当时根本不可能达到或开发这样的软件。然而,从此以后,我学习了许多,如今,我已经能够很轻易地完成这样的软件。而且,如果我能够帮助谁实现绚丽的应用程序,我决定他们可以自由地使用我的代码。

    背景

    此前,我一直在考虑如何做一个全定制的按钮,以及改变RGB元素究竟有多么难。我决定做一个能够提供很多操作颜色的类RibbonColor。如果你运行一下demo程序,并移动Hue,SatBrightnessTrackBar,就会很快明白我上面说的。我必须承认接近70%的RibbonControl链接库已经完成。然而,当人们迫切地希望使用改善过的代码,并告诉我我没有对我的代码作很多解释的时候,我决定把自己当作哑巴。:)

     

    8.C# WinForm开发系列 - Grid Controls

    9.C# WinForm开发系列 - 文章索引(其它一系列控件)

    10.免费用户界面控件 Krypton Toolkit 简介

    Krypton
    简介

    Krypton 2.7.1

     Krypton 套件 包含了让开发人员轻松创建专业外观应用程序的用户界面组件。你可以使用内置的模板来完成与工业标准应用程序相同的外观,诸如 Microsoft Office 2007 。你也可以选择构建自己的定制模板来创建十分独特的用户界面。  Krypton 套件 由三个产品组成: Krypton Toolkit, Krypton RibbonKrypton Navigator。(译者注:在安装 Krypton 套件 后,包含了程序集、帮助文档、模板、示例及其源代码,并把程序集中的组件添加到 Visual Studio 2005(或2008)开发环境的工具箱中,同时添加 Krypton Form Project、Krypton ToolStrip Form Project 和 Krypton Ribbon Form Project 项目模板。 Krypton 套件 提供了 Office 2007 蓝色、Office 2007 银色、Office 2007 黑色、Office 2003 、System 等配色模板,易于与 .NET 的工具栏、菜单栏、状态栏等控件组合使用)

    下载地址(下载解压缩后只需要安装 KryptonToolkit271.msi): windowsclient.net 上的下载

    或者: http://www.componentfactory.com/downloads/KryptonToolkit271.zip


    Krypton Toolkit

    Krypton Toolkit 提供了一组免费的基础用户界面组件。你可以在自己的产品中分发已签名的 Krypton Toolkit 程序集 ,无需付费或经过许可。如果你想查看或修改源代码,你可以在 Component Factory 网站上购买,请查看页末的链接。

    示例界面

    11.仿XP资源管理器中的可伸缩面板控件

       

    [翻译]
    Collapsible Panel control

    该控件拥有类似Windows XP 的资源浏览器中左边的可伸缩面板的功能。


    [简介]

    该控件可以包括多个视图,当你点击面板的标题栏时,它可以自动伸缩下面的面板。你可以自己设置它的标题栏图标、定制伸展/收缩按钮。另外,有几种不同的类型标志,用于定制面板的界面和行为。

    当你点击一个面板的时候,你将在主窗口收到WM_COMMAND消息的通知,它会告诉你面板真被伸展还是收缩。当然,你也可以设定不让它自动缩放。

    控件还允许自绘图像(ownerdrawn),你可以捕获WM_DRAWITEM消息,然后绘制自己的按钮图像。

    由于性能的考虑,控件内部把按钮图像绘制在一个位图中,这样就可以保证迅速地把它显示到界面上。为了防止闪烁,在绘制过程中使用了memory DC

    VC++可伸缩面板控件

     

    12.一个专业的 Ribbon 控件

       

    作者: Jose M. Menendez Poó
    翻译: Yuxiang
     发表日期: 2008-5-8
    更新日期: 2008-5-29

    简介

    由于在网站上缺少好的免费的 Ribbon 控件,我决定自己编写一个。我分析了以前(包括那些在 CodeProject 上) ribbon 控件的工作机制。很不幸,大多数已有的控件只是差劲的尝试。为什么这样说?因为它们有些缺少好的绘制,有些缺少改变大小的功能,有些几乎是什么都缺。当然,已开发的好的 Ribbon 控件需要付费。这个 ribbon 是免费的。

    为什么不使用 WPF?主要的原因是我需要把 Ribbon 添加到已有的 WinForms 应用程序中。依我看来,这不是“不”使用WPF,而是“还没有”使用。无论如何,你可以在WPF 中承载(host) 一个 WinForms 控件(参阅 http://msdn.microsoft.com/en-us/library/ms750944.aspx)。

    一些设计目标

    实现 — 此 ribbon 包含在一个 Control 窗口中,它内部的每个元素作为控件内部的一系列 bounds 管理,就像 ToolStrip 控件那样。 尽管从 ribboon 的内部代码来管理是困难的,但是这是让它保持最佳实现 ribbon 一种方式。 相信我,下载演示程序,运行它并改变窗体的大小。它完成得很漂亮。

    与 Office ribbon 的一致性 — 我曾经读过有关 Jakob Nielsen 讲述的大多数用户更喜欢所使用的程序看起来像 Word, Excel 或 Powerpoint。这相关明显,因为人们每天都使用这些软件。视觉效果与 office 的 ribbon 一致是非常重要的,因为人们已经知道期待什么,并且那是有益的用法。 我尝试让每个 Ribbon 中的元素的外观及行为严格地与 Office 的 ribbon 一致。

    易于为程序员使用 — 组件命名与大多数 WinForms 命名系统一致, 更多的使用 ToolStrip 元素。为类似的元素的属性,事件和方法命名就像在 ToolStrip 的工艺项那样。

    设计时刻支持我将会添加越来越多的设计时刻支持,因此你可以在设计器中 100% 地管理这个 ribbon。

    当我发现 bugs 或者你乐于让我知道它们,我将会提供 更新 修正 。

    使用 Ribbon

    此 ribbon 位于 System.Windows.Forms 命名空间,就像其它控件,我想使用诸如  MyCoolFirm.MyCoolNameSpace.MyCoolSubNameSpace 等的控件命名方式是让人不爽的(请仅为商业对象进行这样的命名)。

    你可以添加对已经编译的 dll (System.Windows.Forms.Ribbon.dll )引用,或者你可以直接复制源码文件到你的项目文件夹中。现在代码已设计好,你可以只复制源码文件,不需要任何额外的资源。

    快速指南

    此 ribbon 主要由三种元素组成:标签(tabs),标签上的面板(panels on the tabs,其他开发人员称它们为组),以及在面板内部的项目(items inside the panels)。

    这些元素通过 RibbonTabRibbonPanel RibbonItem 类型进行表现。 RibbonItem 是一个为任何承载于 RibbonPanelRibbonDropDown 之上的项提供基本功能的抽象类。

    你可以使用 Ribbon 的智能标记来添加标签,可以通过选定标签并调用在属性表底部的“Add Panel(添加面板)”动作来添加标签的面板。

    Ribbon 上的元素依据可用的 ribbon 空间来调整大小。这是 ribbon 的关键特征。通过调整大小,它试图把所有可用的命令都显示在屏幕上,而不是在溢出的按钮上隐藏它们(就像旧式的 ToolStrip 那样)。

    我使用三种尺寸来处理:Large(大), Medium(中等) 和 Compact(紧凑)。一个附加的尺寸用于面板,因为面板可以被折叠,然后它们采用 Overflow 大小模式。

     

    13.甘特图绘制组件

       

    翻译
    Adagio.81. 著Gantt Chart

    简介
    该组件可以使你简单地把甘特图加入你的应用程序。你只需要3行代码就可以做到了。

    这个甘特图(Gantt Chart)包括下面的特征
    1. 列的宽度自动根据组件的宽度和起始结束时间调整,如果日期之间多于2天,控件只会显示日期,否则还会显示时间。
    2. 你可以给每个bar设置颜色
    3. 自动显示滚动条
    4. 当鼠标停到上面时,自动显示信息
    5. 很容易地使用多行提示框文本

     

    14.Windows Forms .NET

    15.The Code Project (推荐站点, 资源很丰富)

    展开全文
  • 本程序功能描述: ... BHO插件(已知CLSID),使第三方BHO插件在本程序中正常运行,如‘卡巴斯基网址安全检查插件’等。 测试程序下载地址:http://pan.baidu.com/s/1gdBTLGf 测试程序操作: 1.

    本程序功能描述:


    此源码有.net winform版本


    本程序是一个MFC基于对话框的程序,添加了一个WebBrowser控件,这个WebBrowser控件可以加载其它IE BHO插件(已知CLSID),使第三方BHO插件在本程序中正常运行,如‘QQ旋风下载插件’等。


    注:本程序中加载第三方BHO是一个通用的解决方案,并不限于MFC中添加ActiveX控件,只要是自己编写的基于IE内核的浏览器,理论上都可以使用该方案。


    测试程序下载地址:http://yun.baidu.com/s/1bn5WqE7


    此源码有.net winform版本


    测试程序操作:

    1.    打开测试程序,首先弹出一个输入框,请输入第三BHOCLSID,并点击确定。




    2.    程序进入主界面





    附录:

    如何查看第三方BHOCLSID (ID) 

     

    1. 同时按下Windows徽标键+R 打开运行对话框,输入 inetcpl.cpl 点确定,打开Internet选项窗口(或通过IE浏览器菜单中打开也可以)。

    2. 点击‘程序’选项卡,再点击‘管理加载项’。

    3. 在‘管理加载项’窗口中,左侧的‘加载项类型’中点击‘工具栏和扩展’,在右侧的列表中任意点击一个,再点击‘详细信息’链接,可以弹出BHO详细信息窗口,其中可以查看到CLSID(类ID)。



    注:不同版本的IE浏览器,上述操作菜单可能略有差别。


    此源码有.net winform版本

    展开全文
  • 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有...码云:https://gitee.com/kwwwvagaa/net_winform_custom_control.git 如果觉得写的还行,请点个 star 支持一下吧 欢迎前来交流探讨: 企鹅群5...
  • C#超美观第三方控件(DevComponents.DotNetBar2),解压后将dll文件拖拽到工具箱内即可使用,注意新建一个选项卡。
  • Winform折叠菜单实现

    万次阅读 2017-05-11 17:20:45
     在我还没工作前,听朋友说起他面试时遇到的情况,当时面试他的考官要他用C#实现折叠菜单效果,不用第三方控件,对于当时准备不充分的他可谓是来了个措手不及呀!回来后告诉了我们,抱着试试的心里,尝试实现一番,...
  • 最近在搞Winform,想找个折叠式的导航菜单,找个半天,没有找到满意的,找到个第三方组件xpandercontrols,代码太烦人了。codeproject真不错,在那里找到了,代码很瘦的,跟大家分享。vs 2005做的。 界面: 源代码...
  • 基于Winform开发的Ribbon控件 普通按钮 下拉按钮 复选框 应用菜单 面板折叠等功能 由于自定义开发 不需要额外的第三方资源的依赖 完全属于Winform资源 放心使用
  • 效果与Chrome 比较接近,实现了标签新增、删除、移动、自适应宽度等特性。
  • C# 抽屉第三方控件 sidebar + 使用说明

    热门讨论 2012-08-17 23:41:29
    找了几种抽屉实现方式,还是这个控件好用,直接引用就OK,详细看说明,与大家分享下
  • winform程序,在窗体中用第三方控件DotNetBar做的菜单栏,在画UI界面时,在点击菜单栏下拉按钮中的第一个按钮VS2008就会弹出错误,提示的是:无法将类型为“DevComponents.DotNetBar.ButtonItem"的对象强制转换为...
  • 第三方控件中devexpress是真的强大,但在开发使用中多少遇到汉化问题,以下面以报表控件为例,下面是我通过反编译高版本汉化文件得到的报表汉化内容,自己重写下 public class ReportsLocalizer : ...
  • 因为毕业设计要用到Winform编程,所以计划用一个月的时间学一下,这篇笔记里包含了上机实操和代码理论两个部分,欢迎前来交流~ 本篇主要内容:菜单菜单组件,一单元作业
  • winform控件之ComboBox

    千次阅读 2019-05-31 11:54:36
    ComboBox也算是常用的...布局界面很简单,三个label和三个ComboBox即可,另外由于第三个需要一张图片,所以我们这里还需要添加一个ImageList 2 用法示例 如果我们想自定义下来菜单的形式,需要在DrawItem事件中进...
  • WinForm打包

    2019-10-01 17:20:59
    方便在菜单栏和桌面上看到这个打包程序的快捷方式。(快捷方式的属性中可以选择ico图标)               下面是准备卸载任务,打开Application Folder ->add ->file , 之后再地址栏上输入C:...
  • WPF学习

    万次阅读 多人点赞 2019-03-05 22:00:17
    首先感谢刘铁锰先生的《深入浅出WPF》,学习WPF过程碰...在vs界面的菜单栏点击调试-选项,把启用XAML的UI调试工具勾选去掉即可。(我自己觉得偶尔会用用这个) 1 认识WPF 1.1 新建WPF项目 生成 Properties:...
  • C#基础教程-c#实例教程,适合初学者

    万次阅读 多人点赞 2016-08-22 11:13:24
    一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序。当然仅靠一章的内容就完全掌握C#语言是不可能的,...
  • Winform-WebBrowser控件嵌入网页

    千次阅读 2014-01-09 15:00:29
    将该控件的 IsWebBrowserContextMenuEnabled 属性设置为 false,以防止 WebBrowser 控件在用户右击它时显示其快捷菜单. webBrowser1.WebBrowserShortcutsEnabled  =   false ; // 将该控件的 ...
  • 视频播放器源码(WinForm)

    千次阅读 2015-11-17 09:51:14
    二、菜单功能  1、点击[开始]按钮,弹出窗口,选择影片路径,确定后即可播放。可拖拽滚动条快进或快退,点击[关闭]则关闭影片,右下角滚动条可调节声音大小。 运行效果图:   源程序下载地址:
  • 1.控件心得  1.1 基础控件 panel ... 2.4 尽量把功能抽象一下 写到一个类里,否则改起来很费劲,比如把个窗体合并到一个窗体   转载于:https://www.cnblogs.com/SoftWareIe/p/9023791.html
  • 这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议。...由于原声的winform界面美观性不够, 系统采用dotnetbar第三方控件来辅助编程。 首先...
  • C# winform开发界面美化

    千次阅读 2021-01-31 17:29:10
    winform属于比较老的桌面程序开发框架,由于它的易用性常用于一些测试软件、工控软件的开发,界面的美观是其存在的比较大的问题,自带的控件普遍比较不美观,下面介绍一下一些第三方的组件库。 CSkin 使用方法 导入...
  • WinFrom调用EXE,实现窗口内外显示2种方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,377
精华内容 550
关键字:

winform第三方菜单