Framework
的设计与应用
--
基于
Windows Forms
的应用开发实践
/
<2006/12
答客问
>
1.
此区为读者来信询问的问题及我的回
答。
2.
读者姓名皆不公开,信件内容截取问题本身,无涉任何隐私。
3.
如果您于此看到您的问题,内容若有所不当之处,请与我联
络。
问
:
在
.NET
中,运行时使用
Assembly.LoadFile
引用某个目录中的库文件,
但
当该库文件引用了另一个
B
库文件时,
B
库文件仅能放在
于三个位置:
应用程序当前所在目录、
System
目录,全局程序集缓存(
GAC
),要如何让
B
库文件与其引用的库文件在同一个位置,而不限于上述的三个位置?
答
:
可以挂载事件至
AppDomain
的
AssemblyResolve
事件
,
协助
CLR
来找到对应的
Assembly
。
问
:
需要在
IE
中嵌入
WinForm
控件,使用
C#
编写的
WinForm
控件
可以在
IE
中正常显示并运行,但是使用
C++/CLI
编写的
WinForm
控件无论如何都无法显示?
答
:
问题来自于
.NET
的安全权限设定
,
这里有个方案可以试试
.
1
、打开
Microsoft .NET Framework 2.0 Configuration
控制面板程序
2
、运行库安全策略
3
、计算机
4
、代码组
5
、右键
All_code-
新建
-
数据新建代码组名称
-
下一步
--
代码组权限类型选择
“URL”--
下面的
URL
中输入
URL
地址,例如:
http://192.168.0.1/*
6
、使用现有权限集选择
”FullTrust"---
确定。
7
、重新启动
Web Server Services
问
:
为何
C++/CLI
编写的
winForm
控件需要设置
.NET Framework
权限才能被显示而
C#
就不需要?
答
:
原因在于
C++/CLI
的
Complier
目前尚无法如
C
#
,
VB.NET
产生出完整的
Managed Code
,,
这是
C++/CLI
的设计层次问题。
问
:
第八章讲解的
PLUG-IN
技术实现的代码为何
FORM
窗体只能运行一次
,
而当关闭后再次打开就会报错
?
答
: Form
被关闭时会呼叫
Form.Close
函数
,
而此函数会释放所有关于该
Form
的资源,
简单的说,一旦呼叫
Form.Close
后
,
我们就不应该再存取该
Form
了!
如果有
Close
后还需要使用该
Form
的需求,可以撰写
Form.Closing
事件
,
设定
CancelEventArgs.Cancel
为
True
,然后呼叫
Form.Hide
函数来使该
Form
变为不可视。
PS:
提醒您
,Orphean WinForm Helper
的
Form Plug-In
是设计成以
Form.Close
后就释放相关资源。
问:
书中所提及的
Enter As Tab
功能,如果
Enter
键是在按钮上
(Button)
,
它也自动跳到下一个按钮上,怎么实现在按钮上按回车键时,其能够执行按钮
动作呢?
答
:
protected
override bool ProcessDialogKey(Keys keyData)
{
//ActiveControl
属性是目前所在的控件
,
我们可以判断其型别来决定是否做
Focus Change.
if ((ActiveControl is TextBoxBase) ||
(ActiveControl is DateTimePicker) ||
(ActiveControl is ListControl))
{
if (keyData == Keys.Return)
return base.ProcessDialogKey(Keys.Tab);
}
else if (ActiveControl is Button) //
当
ActiveControl
是
Button
时
.
{
if (keyData == Keys.Return)
{
((Button)ActiveControl).PerformClick(); //
执行
Click
事件
return true;
}
}
return base.ProcessDialogKey(keyData);
}
视需求而定,
您可针对
ActiveControl
的型别来判断是否做出
Focus Change
的动作。
问
:
书中第
488
页中声明了
IDataModalRefreshService
接口
,
为何只有
Customers
与
Products
两上是声明到了
DATATABLE
级,而其它的全部声明到
DataSet
级?
答
:
这两个函数只需要用到
DataTabl
e
,
而其它因为拥有
Relatio
n
,
所以必须以
DataSet
层级来传
.
传
DataTable
的流量比
DataSet
来的小,可是无法传递
Relation
.
。
转载请注明原文地址: https://ibbs.8miu.com/read-200034.html