博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dsoframer控件的学习
阅读量:6223 次
发布时间:2019-06-21

本文共 4035 字,大约阅读时间需要 13 分钟。

根据自己对dsoframer控件的学习,想把dsoframer控件进行简单的包装为C#的usercontrol,大体需要作如下:

1.使用前注册该dsoframer控件,我把该dso控件当作嵌入资源,用学习笔记1中的方法注册即可

ContractedBlock.gif
ExpandedBlockStart.gif
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>
  
///
 添加控件
  
///
 
</summary>
  
private
 
void
 AddOfficeControl()
  {
   
try
   {
    
this
.m_Panel_Control.Controls.Add(m_axFramerControl);
    m_axFramerControl.Dock 
=
 DockStyle.Fill;
   }
   
catch
(Exception ex)
   {
    
throw
 ex;
   }
  }
3
.初始化dsoframer控件 ,我这里用已经有的文件进行dso初始化,
  
///
 
<summary>
  
///
 初始化office控件
  
///
 
</summary>
  
///
 
<param name="_sFilePath">
本地文档路径
</param>
  
private
 
void
 InitOfficeControl(
string
 _sFilePath)
  {
   
try
   {
    
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
;
   }
   
catch
(Exception ex)
   {
    
throw
 ex;
   }
  }
     下面这个方法是dso打开文件时需要的一个参数,代表office文件类型
  
///
 
<summary>
  
///
 根据后缀名得到打开方式
  
///
 
</summary>
  
///
 
<param name="_sExten"></param>
  
///
 
<returns></returns>
  
private
 
string
 LoadOpenFileType(
string
 _sExten)
  {
   
try
   {
    
string
 sOpenType 
=
 
""
;
    
switch
 (_sExten.ToLower())
    {
     
case
 
"
xls
"
:
      sOpenType 
=
 
"
Excel.Sheet
"
;
      
break
;
     
case
 
"
doc
"
:
      sOpenType 
=
 
"
Word.Document
"
;
      
break
;
     
case
 
"
ppt
"
:
      sOpenType 
=
 
"
PowerPoint.Show
"
;
      
break
;
     
case
 
"
vsd
"
:
      sOpenType 
=
 
"
Visio.Drawing
"
;
      
break
;
     
default
:
      sOpenType 
=
 
"
Word.Document
"
;
      
break
;
    }
    
return
 sOpenType;
   }
   
catch
 (Exception ex)
   {
    
throw
 ex;
   }
  }
4
.我觉的最重要的一步,就是公布dso当前的活动对象,因为自己做这个usercontrol功能不强,但是不能把人家dso功能给杀掉,给使用者留一个更大的空间。。。。
  
///
 
<summary>
  
///
 获取当前操作的文档
  
///
 
</summary>
  
public
 
object
 ActiveDocument
  {
   
get
   {
    
return
 
this
.m_axFramerControl.ActiveDocument;
   }
  }
  
///
 
<summary>
  
///
 获取当前控件对象
  
///
 
</summary>
  
public
 AxDSOFramer.AxFramerControl OfficeObject
  {
   
get
   {
    
return
 
this
.m_axFramerControl;
   }
  }
  
///
 
<summary>
  
///
 保存
  
///
 
</summary>
  
public
 
void
 Save()
  {
   
try
   {
    
//
先保存
    
this
.m_axFramerControl.Save(
true
,
true
,
""
,
""
);
   }
   
catch
(Exception ex)
   {
    
throw
 ex;
   }
  } 
  
///
 
<summary>
  
///
 另存为
  
///
 
</summary>
  
public
 
void
 SaveAs()
  {
   
try
   {
    
//
另存为
    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));
    }
   }
   
catch
(Exception ex)
   {
    
throw
 ex;
   }
  }
  
///
 
<summary>
  
///
 关闭当前界面
  
///
 
</summary>
  
public
 
void
 Close()
  {
   
try
   {
    
if
(
this
.m_axFramerControl 
!=
 
null
)
    {
     
this
.m_axFramerControl.Close();
    }
   }
   
catch
(Exception ex)
   {
    
throw
 ex;
   }
  }

源代码

DLL:

版权说明

  如果标题未标有<转载、转>等字则属于作者原创,欢迎转载,其版权归作者和博客园共有。

  作      者:温景良
  文章出处:  或 

分类: ,
+加关注
0
0
上一篇:
下一篇:
posted @ 2008-12-29 15:22 Views( 1176) Comments( 1)
  
1546267 2009/6/3 10:42:29
2009-06-03 10:42 |
正在给头儿逼着看这个控件的代码,不知道从哪儿入手,看得人一头雾水,能否指点一二,谢谢!!
最新IT新闻:
·
·
·
·
·
»
最新知识库文章:
·
·
·
·
·
»

公告

 
本文转自 博客园博客,原文链接: ,如需转载请自行联系原作者
 
 
 
你可能感兴趣的文章
Flymeos插桩适配教程
查看>>
大端模式与小端模式、网络字节顺序与主机字节顺序
查看>>
微信支付申请90%的商户都卡在这儿了,申请微信支付,商户功能设置详细说明...
查看>>
高仿Instagram 页面效果android特效
查看>>
2016 年总结
查看>>
将String转化成Stream,将Stream转换成String
查看>>
java路径Java开发中获得非Web项目的当前项目路径
查看>>
【工具使用系列】关于 MATLAB 遗传算法与直接搜索工具箱,你需要知道的事
查看>>
Kali-linux Arpspoof工具
查看>>
PDF文档页面如何重新排版?
查看>>
基于http协议使用protobuf进行前后端交互
查看>>
bash腳本編程之三 条件判断及算数运算
查看>>
php cookie
查看>>
linux下redis安装
查看>>
弃 Java 而使用 Kotlin 的你后悔了吗?| kotlin将会是最好的开发语言
查看>>
JavaScript 数据类型
查看>>
量子通信和大数据最有市场突破前景
查看>>
StringBuilder用法小结
查看>>
对‘初学者应该选择哪种编程语言’的回答——计算机达人成长之路(38)
查看>>
如何申请开通微信多客服功能
查看>>