根據自己對dsoframer控件的學習,想把dsoframer控件進行簡單的包裝為C#的usercontrol,大體需要作如下:
1.使用前注冊該dsoframer控件,我把該dso控件當作嵌入資源,用學習筆記1中的方法注冊即可
Code
/// <summary>
/// usercontrol控件初始化
/// </summary>
/// <param name="_sFilePath">本地檔案全路徑</param>
public void Init(string _sFilePath)
{
try
{
RegControl();//注冊控件
if(!CheckFile(_sFilePath))//判斷是否為所支援的office檔案
{
throw new ApplicationException("檔案不存在或未辨別的檔案格式!");
}
AddOfficeControl();//這裡一定要先把dso控件加到界面上才能初始化dso控件,這個dso控件在沒有被show出來之前是不能進行初始化操作的,很奇怪為什
//麼作者這樣考慮
..
InitOfficeControl(_sFilePath);
}
catch(Exception ex)
throw ex;
}
public bool RegControl()
try
{
Assembly thisExe = Assembly.GetExecutingAssembly();
System.IO.Stream myS = thisExe.GetManifestResourceStream("NameSpaceName.dsoframer.ocx");
string sPath = “該ocx檔案的實際路徑”+ @"/dsoframer.ocx";
ProcessStartInfo psi = new ProcessStartInfo("regsvr32","/s " +sPath);
Process.Start(psi);
}
catch(Exception ex)
MessageBox.Show(ex.Message);
return true;
2.動态向usercontrol添加dsoframer執行個體
private AxDSOFramer.AxFramerControl m_axFramerControl = new AxDSOFramer.AxFramerControl();
/// <summary>
/// 添加控件
private void AddOfficeControl()
this.m_Panel_Control.Controls.Add(m_axFramerControl);
m_axFramerControl.Dock = DockStyle.Fill;
3.初始化dsoframer控件 ,我這裡用已經有的檔案進行dso初始化,
/// 初始化office控件
/// <param name="_sFilePath">本地文檔路徑</param>
private void InitOfficeControl(string _sFilePath)
if(m_axFramerControl == null)
throw new ApplicationException("請先初始化office控件對象!");
string sExt = System.IO.Path.GetExtension(_sFilePath).Replace(".","");
//this.m_axFramerControl.CreateNew(this.LoadOpenFileType(sExt));//建立新的檔案
this.m_axFramerControl.Open(_sFilePath,false,this.LoadOpenFileType(sExt),"","");//打開檔案
//隐藏标題
this.m_axFramerControl.Titlebar = false;
下面這個方法是dso打開檔案時需要的一個參數,代表office檔案類型
/// 根據字尾名得到打開方式
/// <param name="_sExten"></param>
/// <returns></returns>
private string LoadOpenFileType(string _sExten)
string sOpenType = "";
switch (_sExten.ToLower())
case "xls":
sOpenType = "Excel.Sheet";
break;
case "doc":
sOpenType = "Word.Document";
case "ppt":
sOpenType = "PowerPoint.Show";
case "vsd":
sOpenType = "Visio.Drawing";
default:
return sOpenType;
catch (Exception ex)
4.我覺的最重要的一步,就是公布dso目前的活動對象,因為自己做這個usercontrol功能不強,但是不能把人家dso功能給殺掉,給使用者留一個更大的空間。。。。
/// 擷取目前操作的文檔
public object ActiveDocument
get
return this.m_axFramerControl.ActiveDocument;
/// 擷取目前控件對象
public AxDSOFramer.AxFramerControl OfficeObject
return this.m_axFramerControl;
/// 儲存
public void Save()
//先儲存
this.m_axFramerControl.Save(true,true,"","");
}
/// 另存為
public void SaveAs()
//另存為
SaveFileDialog sfd = new SaveFileDialog();
string sExt = System.IO.Path.GetExtension(this.m_sFilePath).Replace(".","");
sfd.Filter = sExt;
if(sfd.ShowDialog() == DialogResult.OK)
string sSavePath = sfd.FileName;
if(System.IO.File.Exists(sSavePath))
{
System.IO.File.Delete(sSavePath);
}
this.m_axFramerControl.SaveAs(sSavePath,this.LoadOpenFileType(sExt));
/// 關閉目前界面
public void Close()
if(this.m_axFramerControl != null)
this.m_axFramerControl.Close();
版權說明
如果标題未标有<轉載、轉>等字則屬于作者原創,歡迎轉載,其版權歸作者和部落格園共有。
作 者:溫景良
<a href="http://home.cnblogs.com/u/wenjl520/">溫景良(Jason)</a>
<a href="http://home.cnblogs.com/u/wenjl520/followees">關注 - 32</a>
<a href="http://home.cnblogs.com/u/wenjl520/followers">粉絲 - 161</a>
<a>+加關注</a>
<a></a>
Post Comment
正在給頭兒逼着看這個控件的代碼,不知道從哪兒入手,看得人一頭霧水,能否指點一二,謝謝!!
<a href="http://www.ucancode.com/index.htm" target="_blank">【推薦】超50萬VC++源碼: 大型工控、組态\仿真、模組化CAD源碼2018!</a>
<a href="https://dnspod.cloud.tencent.com/act/yearendsales?from=IT&fromSource=gwzcw.741110.741110.741110" target="_blank">【推薦】騰訊雲新使用者域名搶購1元起,抓緊搶購</a>
<b>最新IT新聞</b>:
<b>最新知識庫文章</b>: