聊天主题:Programing WinFrom with C#
主持人和专家介绍
Guide_Wendy_MS : 欢迎大家参加微软在线技术聊天。
Guide_Wendy_MS : 本次聊天的主题是 Programing WinFrom with C#
Guide_Wendy_MS : 首先,让我们欢迎微软全球技术中心工程师郑子颖,黄雪斌
Eric_MS : 大家好,我是郑子颖
steven_ms : 大家好,欢迎大家参加微软社区的聊天!
Guide_Wendy_MS : 微软亚洲MVP王洪超现在遇到网络故障,马上就会过来
Guide_Wendy_MS : 下面我们开始今天的聊天,欢迎大家就 Programming WinFrom with C# 向我们的工程师提问!
Guide_Wendy_MS : 我们的MVP来了
Joy_MVP : 大家好,我是王洪超,网名开心就好,十分高兴参加今天的聊天活动,希望与大家一起探讨
steven_ms : 这次聊天从4:00到5:00
来宾提问 Q 和专家解答 A
[Q]CT : 用.NET可不可以实现类似java 的applet?
[A]可以,可以把winform放在IE中,这个叫做Hybrid UI。
[Q]HappyIsGood : 对啊,.NET的webform做不到类似applet的动画啊?如水纹、火烧....
[A]可以,.NET的System.Drawing空间下面的类可以完成各种2D功能。
[Q]如果我把C#写的winForm嵌套到web页面中,这样好不好呢?
[A]完全可以,你可以参考chs.gotdotnet.com/quickstart里面的示例,但客户端必须安装有.NET Framework
[Q]yanhao : Eric_MS,为什么GDI+的效果还不如java???
[A]我想我不方便评价GDI+与JFC/Java2D那个效果好,毕竟有一些主观因素,每个人的理解也多少有所不同。
[Q]whoami59 : 这聊天要聊到什么时候?
[A]16:00~17:00
[Q]其实,MS可以尝试着开放MSn messenger。
[A]如果指的源代码开放,我可能无法回答,但就我所知,你可以下载MSN Messager的插件,做一些有意义的开发。
[A]MSN的认证是和Passport紧密集成的。
[Q]我还是想具体问一下,怎么在做安装文件时,让Frameworks自动安装?
[A]微软在MSDN里面有一个示例是讲这个的,我在这儿建议大家使用Install Shiled Developer 7.03以上版本,或者Wise for VS.NET做安装程序。
[A]再补充一下:用VS.NET自带的Setup Wizard也可以做到,大致的方法是加一个Condition就可以了,不会全自动安装,但是当发现没有安装.NET 时会提示用户安装,并指向一个目录。
[A]过几天我们会在www.microsoft.com/china/community下发一篇文章:把.NET程序部署到没有安装.NET Framwork的机器上。
[Q]HappyIsGood : 微软会不会开放其他.NET代码?
[A]如果你指的是.NET类库的代码,你完全可以通过ILDASM.exe来看,或者通过一个叫做Anakrino的工具来看。
[A]Continue:它们做的安装程序可以自动侦测客户端是否安装有.NET Framework,然后自动安装。
[Q]HappyIsGood : “可以把winform放在IE中,这个叫做Hybrid UI”,能不能再说说这个?
[A]这是一篇中文的文档,描述如何在 Internet Explorer (IE) 内成功地执行 Windows 窗体控件: http://chs.gotdotnet.com/QuickStart/aspplus/default.aspx?url=%2fquickstart%2 fwinforMS%2fdoc%2fWinForMSIeSourcing.aspx。
[Q] 把winform嵌入到webform中,客户端要下载ActiveX,会不会造成安全性的问题?
[A]我个人认为,Winform嵌在IE中已经不再是ActiveX机制了。类似于Java Applet的机制。
[Q]Gemini : 谁能告诉我一篇关于Install Shield的文章?
[A]你可以到它的网站上去找一下,但在这儿最好不讨论其它公司的技术,有兴趣的话,可以到http://www.dev-club.com上讨论:)
[Q]liangqingqi : 那该如何把winform嵌入到webform中呢 能给点例子吗?
[A]这是一篇中文的文档,描述如何在 Internet Explorer (IE) 内成功地执行 Windows 窗体控件: http://chs.gotdotnet.com/QuickStart/aspplus/default.aspx?url=%2fquickstart%2 fwinforMS%2fdoc%
[Q] clxowen : 如果IE存在安全问题,会影响到winform吗?
[A]据我所知,IE中内嵌的WinForm有自己的安全机制,限制访问本地资源。
[Q]HappyIsGood : 如果一个窗体是隐藏的,我用把它的内容bitblt到另外一个窗体,怎么是全黑的?难道一定要把窗体显示出来?
[A]你指的是在WinForm里面用Win32 API里的那个bitblt么?一般很少这样做。关于这个问题,你可以把你的代码放到newsgroup上,大家一起看一下问题出在哪里。
[Q]HappyIsGood : 谁知道哪里有免费、好用的obfuscation?网上我只找到试用版。
[A]据我所知没有免费的,目前网上能够找到的大致只有五个,平均价格都在400美元到2000美元之间。
[A]下面五个仅供参考:
Salamander .NET obfuscator $499 http://www.remotesoft.com/salamander/obfuscator.html
Demeanor for .NET $1,250 http://www.wiseowl.com/products/Products.aspx
Dotfuscator $895 http://www.preemptive.com/dotfuscator/index.html
.NET IL-Obfuscator $92.95 http://9rays.NET/cgi-bin/components.cgi?act=1&cid=86
LSW IL-Obfuscator $99
[Q]HappyIsGood : Joy,你对winform代码安全性有什么看法?
[A]我只能说我自己的看法,大家一直对微软的安全性不以为意,其实我认为,安全与易用在某种场合下是相悖,微软注重易用性。不过据悉微软今年2月份到4月份专门做安全工作,所以微软推出了两个.NET Framework 的SP2。
[Q]yanhao : .NET Framework 的SP2有没有中文版?
[A]有,共有9个语言的版本。
[Q]HappyIsGood : 反编译.NET代码太容易了~~
[A]对于普通的.NET assembly来说,如果不经过obfuscator,的确可以轻易的得到原始的source code。这是任何中间代码机制都无法避免的,java byte code也可以轻易的反编译。不过,即使是native code,反向工程也并非不能做到。因此,代码保护是一个综合的问题。
[Q]在WebForm中有一个Web.Config的配置项目,那么在WinForm是否也存在这样一个配置文件呢?如何使用?
[A]是的,这个问题非常好,VS.NET中没有直接为WinForm增加配置文件,但我们仍然可以使用这个好的工具。我通常的做法是这样的,在解决方案浏览器框中的项目中点右键,从弹出式菜单中“添加现有项”,确定。
[Q] K,我已经添加了这个配置文件,那么如何使用呢?
[A]你仍然可以使用System.Configuration.ConfigurationSettings.AppSettings[stringvalue 或 int value]去使用在AppSettings中所设置的值,另外,如果是在界面上,比如为一个Label.text设置的值,你可以在设计界面中选择这个Label,然后在其属性中选择“DataBinding”属性中的“高级选则”。
[Q]CT : 有个公司现在做这么一种产品,就是把.NET的IL编译成java,这样就可以在非MS的平台上使用,这种产品是否可以发展起来?
[A]首先我觉得这种产品的难度不亚于在其它平台上开发.NET framework。因为一旦.NET程序中牵涉到remoting、appdomain、p/invoke等东西,翻译成Java就非常困难。另外,现在在Linux和FreeBSD平台都已经有.NET framework的版本了
[Q]如何编写国际化及本地化程序?
[A]这个问题很好,VS.NET为你编写国际化与本地化应用程序已经作了很好的内嵌性支持。你可以在你设计的窗体中选择其“Localizable”属性,默认为False,你可以将其设置为True,然后在Language中选择一种你欲本地化的语言即可。你也可以参阅:MS-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cp
[Q]Tommy : 能详细说明一下obfuscator吗?
[A]你可以把obfuscator理解为在assembly里面做全文替换,把变量名和函数名都替换成无意义的名字,以使得反编译后源码难以理解。这样理解虽然不准确,但是简单来说可以这样理解。
[Q]如何在编程时使用UML进行设计?
[A]建议你使用MS Visio XP,它内含了对.NET编程的内在支持。另外,如果你使用C#进行开发的话,你可以使用Rational XDE进行系统设计。具体细节我们在这儿不作介绍。有兴趣,可以参阅 http://www.dev-club.com电子杂志具体文章(我将写一篇文章,对Ration XDE的使用进行系统介绍。
[Q]关于文档-视图编程你有什么好的建议?
[A]在您的VS.NET起始页上选择“查找示例”,然后在页面中将示例配置文件转换为“Visual C#开发人员”,关键字输入“Scribble”,点击搜索,会找到一个“Scribble 示例:Visual C# MDI 绘图应用程序:Visual C# 示例 - 简体中文 <javascript:browserNavigate(2,'MS-help://MS.VSCC/MS.MSDNVS.2052/cssample/htm。
[Q]我在编写应用程序时应该使用什么样的架构?
[A]对于不同的目标,应用程序架构的选择有不同的标准,这也与系统设计人员以及开发人员的经验有关。在VS.NET中,提供了一套基础的应用程序架构解决方案。你可以在“文件”-“新建”-“项目”对话框话中,选择“其它项目”,将其展开,然后选择“企业级别”。
[Q]HappyIsGood : 为什么微软要正式版把 ilasm的 owner功能取消,这功能不是很实用吗?
[A]这个问题的确时常有人问到。ilasm的owner选项被去掉的原因很多。就目前来说,obfuscator已经可以实现一定级别的源码保护了。
[Q]如何在标题框中显示“帮助”按钮(即在最大化及最小化按钮旁边显示一个“?”型图标)?
[A]在主窗体属性上选择HelpButton属性,将其值设置为True,同时将最大化按钮以及最小化按钮设置为False。将在主窗体上的标题栏中显示“帮助”按钮。如果要使这个帮助按钮拥有效果,我们还要在主窗体上添加一个Help。
[Q]yanhao : 可能用真正用winform开发项目得人不多
[A]winform在编写Windows上桌面应用时比MFC效率提高很多,可以实现RAD。
[Q]lei : 2。我想用一个Grid显示一个列表信息,我需要能控制到每个CELL单元格,并且能编程控制 行宽和列高,该如何完成,DOTNET除了提供一个DATAGRID外,有没有一个类似StringGrid的控件可用?
[A]关于DataGrid各个列的控制,你需要使用DataGridTableStyle来控制。使用GridColumnStyles对每一列的宽度进行控制。
[Q]HappyIsGood : 如何改变屏幕分辨率啊?
[A]我补充以下:你可以看这里 http://www.omniscium.com/tutorials/dotNET/resolution.asp,这里有很详细的源代码。
[Q] 我用了这么一个语句 ((ColArgs)ca).fColWidth=100.0f; acl : 出现错误:赋值号左边必须是变量、属性或索引器 acl : 请教一下为何 :)
[A]ColArgs a=((ColArgs)ca).fColWidth;a=100.0f;
[A]我在newsgroup里面看到你的这个问题了,可能需要把你的ColArgs类的代码贴一下看看
[Q]lei : DOTNET为Label提供了Enter和Leave事件,它们能被触发吗?
[A]据我所知,按照通常的方式是不能触发的。至于如何触发它,我们可以在newsgroup里面讨论。
[Q]lei : 4。我在FORM上放置自定义的用户控件,老从FORM上消失,但在Form类的定义中仍然有它的定义,WHY?
[A]这需要看具体代码和你的用户空间的情况。大部分的可能是与VS.NET的Form Designer有关。
[Q]Gemini : 我在vs.net里面设计窗体时,有时候会出现无法加在的情况,但是编译又可以通过,怎么回事儿?
[A]我这儿有时候也出现此类情况,估计是里面的某些控件的Design类做的不太好的原因,一般是把代码拷出来,重新建立:)
[建议]有关一些出错、调试的问题大家可以到新闻组进一步讨论:)
新闻组的地址:msnews.microsoft.com,关于如何加入新闻组可以参考: http://www.microsoft.com/china/community/newsgroup.asp
[Q]lei : 用一个MDI父窗口MainWnd,调用一个窗口ChildWnd ...
[A]欢迎你把问题贴到新闻组,可以进行测试和讨论
[Q]HappyIsGood : 如果在mdi窗体放了一个picturebox,你就在子窗体前面挡住了,怎么解决?
[A]你可以在Design的时候,在上面点右键,让其置于后面。
[Q]lei : 这个问题可以用Ctrl+Arrow来实现,但当FORM失去焦点时,它将无法获得焦点,它无法再获得键盘事件?
[A]作为workaround,keyboard hook应该可以帮你一点忙,不妨试试看: http://www.csdn.net/expert/topic/837/837342.xml,
另外,建议你先放置一个Panel,设置其Dock。在上面再放PictureBox。
[Q]HappyIsGood : .net是不是具有用程序写程序的功能?用程序编译程序?
[A]可以说是的. System.reflection的功能很强大,可以根据字符串调用类、方法、属性,也可以动态修改类的定义
[Q]Tommy : 在Winform的数据库连接中,可以用SSPI方式来保密,为什么在WebForm中就不能如此用呢?如果想能够使用,是不是需要将本地访问限制全部开放?
[A]应该与权限有关,你可以试试看用impersonate把asp.net的权限升高,然后再试试看
结束语
Host Guide_Wendy_MS says:
已经过5点了,今天的聊天就到这里。谢谢大家参加此次微软专家技术聊天。
Host Guide_Wendy_MS says:
同时也感谢微软亚洲MVP王洪超和微软技术中心郑子颖、黄雪斌工程师能在百忙之中抽出时间参加聊天。
Host Guide_Wendy_MS says:
我们的聊天时间是每周四下午4:00~5:00。希望下一次还可以看到大家.
Host Guide_Wendy_MS says:
下一次(9月5日)的话题是 Common Language Runtime
Host Guest_Joy_MVP says:
十分感谢大家的支持:)
Host Guide_Wendy_MS says:
如果您有任何问题,请参加我们的新闻组
Host Guide_Wendy_MS says:
微软的邮件服务器是:msnews.microsoft.com
Host Guide_Wendy_MS says:
本次聊天到此结束,谢谢大家!