??xml version="1.0" encoding="utf-8" standalone="yes"?>
Application Web application , console 都可以{?
象作者dannyc 说的
"Together we can translate every .NET application into Java !"
NET2java 作ؓ Netbeans 5.0的plugin 提供? 要用NET2java 你就得先下Netbeans
5.0
下面是我的安装步?br />1 .下蝲Netbeans 5.0
2. 安装Netbeans 5.0, 必需用jdk1.5.07 version 以上, NET2java的code 用jdk1.5.07?/p>
新方?
3. 安装com-sun-dn-DNPlugin.nbm plugin 到Netbeans 5.0q个很简? 不会看Netbeans 5.0的help
里面有案可说明的.
4. 安装com-sun-dn-DNPlugin.nbm 后把dnj_translation_library_061406.zip unzip 到C:\Documents And Settings\Trove\dnj\
下面.
5. 在Netbeans 5.0?file menu 多了一?import
q没有command line tool Qdannyc 说的
I'm really sorry if you don't like NetBeans, I'll put in the command line version of NET2Java soon
希望他早点realse command tool .
example 能{换, 最后改一?main的code好?
转换我自qproject 没成功. L下面的exception Q我ldannyc发mail? 真希望他能尽快fixq个bug.
java.io.FileNotFoundException: D:\try\net2java\src\Tomi\Data\Minosse\GTTableInfoDataSource:GTDataSource.java (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
(RequestProcessor.java:493)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:926)
下蝲
net代码向java 的代码{换工?br />dnj_translation_library_061406
https://net2java.dev.java.net/files/documents/5085/36196/dnj_translation_library_061406.zip
com-sun-dn-DNPlugin.nbm
https://net2java.dev.java.net/files/documents/5085/36197/com-sun-dn-DNPlugin.nbm
dnj_samples_053006.zip
https://net2java.dev.java.net/files/documents/5085/36198/dnj_samples_053006.zip
private AppUpdate.UpdateServ UpdateSvr;
private void button1_Click(object sender, System.EventArgs e)
{
if(LinkWebServices()==true)
{
this.label1.Text="q接服务?...... PASS";
if(CheckVer()==true)
{
this.label2.Text="查最新版本ƈ下蝲.......PASS";
}
else
{
this.label2.Text="查最新版本ƈ下蝲.......FAIL";
}
}
else
{
this.label1.Text="q接服务?......FAIL";
}
}
//q是用来与升U服务器建立q接
private bool LinkWebServices()
{
try
{
UpdateSvr=new UpdateServ();
return true;
}
catch
{
return false;
}
}
//调用webservice用来查是不是有最新的版本
private bool CheckVer()
{
string path =Application.StartupPath;
try
{
VersionCheck(path);
return true;
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
return false;
}
}
private void VersionCheck(string desPath)
{
try
{
#region 查看文g和目?br /> if(!desPath.EndsWith(@"\"))
desPath += @"\";
if(!System.IO.Directory.Exists(desPath))
{
System.IO.Directory.CreateDirectory(desPath);
}
string tempPath = desPath + @"tempDesPathCache\";
if(System.IO.Directory.Exists(tempPath))
{
System.IO.Directory.Delete(tempPath,true);
System.IO.Directory.CreateDirectory(tempPath);
}
else
System.IO.Directory.CreateDirectory(tempPath);
if(!System.IO.File.Exists(desPath + "UpdateConfig.xml"))
{
System.Xml.XmlDocument updateConfig = new System.Xml.XmlDocument();
updateConfig.LoadXml(@"<root></root>");
updateConfig.Save(desPath + "UpdateConfig.xml");
}
#endregion
System.Xml.XmlDocument serverXmlDoc = UpdateSvr.AppUpdateVertion();
System.Xml.XmlDocument localXmlDoc = new System.Xml.XmlDocument();
localXmlDoc.Load(desPath + "UpdateConfig.xml");
bool newVersionExist = false;
bool moduleExist = false;
System.Xml.XmlNode serverNode0 = serverXmlDoc.ChildNodes[0];
System.Xml.XmlNode localNode0 = localXmlDoc.ChildNodes[0];
foreach(System.Xml.XmlNode serverNode in serverNode0)
{
moduleExist = false;
foreach(System.Xml.XmlNode localNode in localNode0)
{
//扑ֈ对应模块
if(localNode.ChildNodes[0].InnerText == serverNode.ChildNodes[0].InnerText)
{
moduleExist = true;
//版本号判?br /> if(localNode.ChildNodes[1].InnerText.CompareTo(serverNode.ChildNodes[1].InnerText) < 0)
{
newVersionExist = true;
if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
{
DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}
else
{
DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}
}
break;
}
}
//没找到对应模?br /> if(false == moduleExist)
{
if(System.Configuration.ConfigurationSettings.AppSettings["NetStyle"].ToString()=="internet")
{
DownloadFile(serverNode.ChildNodes[2].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}
else
{
DownloadFile(serverNode.ChildNodes[3].InnerText,tempPath + serverNode.ChildNodes[0].InnerText);
}
}
}
//写入新UpdateConfig.xml升完毕后替?br /> if(newVersionExist)
{
serverXmlDoc.Save(tempPath + "UpdateConfig.xml");
if(DialogResult.Yes == MessageBox.Show("有新版本Q是否更?","提示",MessageBoxButtons.YesNo))
{
string[] dirs = System.IO.Directory.GetFiles(tempPath, "*.*");
string fileName;
foreach (string dir in dirs)
{
fileName = ((dir.Split(Convert.ToChar(@"\")))[dir.Split(Convert.ToChar(@"\")).Length - 1]);
if(System.IO.File.Exists(desPath + fileName))
{
//TODO:可以支持备䆾以前版本
System.IO.File.Delete(desPath + fileName);
}
//TODO:如果pȝ正在q行Q?zhn)得停止系l,至于如何停止Q也许可以用System.Diagnostics.Process
System.IO.File.Move(dir,desPath + fileName);
}
MessageBox.Show("升完毕");
}
else
{
//TODO:可以支持重新提示升
}
}
}
catch(Exception ex)
{
throw new Exception("升p|Q原因是Q? + ex.Message,ex);
}
}
//下蝲最新的文g
private void DownloadFile(string source,string fileName)
{
try
{
System.Net.WebClient myWebClient = new System.Net.WebClient();
myWebClient.DownloadFile(source,fileName);
}
catch(Exception ex)
{
throw new Exception("下蝲p|Q原因是Q? + ex.Message,ex);
}
}
Q注Q本文期望的读者是那些有一定用C#开发WindowsE序基础但暂时还不会制作可拖动窗体的朋友。)
首先Q我们来复习一下一个WindowsH体的组成。请看这张图Q?/font>
? WindowsH体构成
q是一个Ş式化的标准WindowsH体。首先,H体的顶部是一个标题栏Q其余的部分是窗体的MQ包围在H体M外围的是一个边框,Ҏ(gu)内不是我们攄控g或绘制图形的用户区?/font>
图中q标明了各种H体构造元素的寸的获得方法。对于用户区Q?span class="mycode">System.Windows.Forms.Form提供了实例属?span class="mycode">ClientSizeQ相信大家已l很熟?zhn)了。而要x一般性的H体构造元素(如标题栏、边框等Q的寸Q我们可以?NETcd中提供的一个类Q?span class="mycode">System.Windows.Forms.SystemInformationQ这个类提供了一些静态属性如表示标题栏高度的CaptionHeight。有?span class="mycode">SystemInformationcȝ信息可以?NET SDK文目录?/font> .NET Framework SDK -> 参?-> cd -> System.Windows.Forms -> SystemInformation c?/font> ”处扑ֈQ注Q这里的链接只在?zhn)安装?NET Framework 1.1体中文版q且安装了配套文时才有效)。这是一个很有用的类Q希望大家能够记住它Q可能?zhn)早就知道了,可我是才知道?_-汗~~Q?/font>
接下来,我们来看看如何在在用户区拖动鼠标时移动窗体。请看下面这张图Q?/font>
? H体的移?/font>
我们来观察鼠标在H体内的位置和窗体的UdQ很Ҏ(gu)可以发现Q在H体被拖动的q程中,鼠标在窗体内的相对位|是始终不变的!那么Q我们只要检到鼠标在屏q中的移动ƈ修改H体的位|就可以辑ֈ拖动H体的目的!
我们知道Q在鼠标消息/事g处理中,只能得到鼠标相对于窗体的位置。那么,如何知道鼠标在屏q中的位|呢Q这里又要提C个类Q?span class="mycode">System.Windows.Forms.ControlcR也怽会很吃惊Q这不是所有控件的基类么?呵呵~是这样di。不q,管是这PControlcd没有像其他广泛用的基类那样被声明ؓ抽象c,而且它提供了一个静态属性:MousePositionQ通过q个属性可以得到鼠标相对于屏幕的位|。有?span class="mycode">Controlcȝ信息可以?NET Framework文目录?/font> .NET Framework SDK -> 参?-> cd -> System.Windows.Forms -> Control c?/font> ”处扑ֈQ注Q这里的链接只在?zhn)安装?NET Framework 1.1体中文版q且安装了配套文档时才有效)?/font>
知道了如何获取这些信息之后,制作UdH体实际上就成了一个很单的问题了。基本过E是q样的:首先Q在鼠标Q左键或一个你喜欢的键Q按下时Q记录鼠标位|;׃在移动的q程中,鼠标的屏q坐标发生变化但H体相对坐标不变Q我们可以推出H体位置的变化ؓQ假?span class="mycode">mousePositionhSystem.Drawing.PointcdQ表C鼠标在H体中的相对坐标Q:
// CZ代码1
Form.Top = Control.MousePosition.Y - mousePosition.Y;
Form.Left = Control.MousePosition.X - mousePosition.X;
q样q不行,因ؓ我们?span class="mycode">mousePosition表示的是鼠标在窗体用户区内的相对坐标Q但在移动窗体的时候还要考虑H体标题栏和Ҏ(gu)的尺寸。在上面的基上,我们代码修正ؓQ?/font>
// CZ代码2
Form.Top = Control.MousePosition.Y - mousePosition.Y
- SystemInformation.FrameBorderSize.Height - SystemInformation.CaptionHeight;
Form.Left = Control.MousePosition.Y - mousePosition.Y
- SystemInformation.FrameBorderSize.Width;
也就是说Q在高度上(U坐标)要减L题栏的高度和Ҏ(gu)的高度,而在宽度上(横坐标)要减去边框的宽度。然而,当制作一个既没有标题栏也没有Ҏ(gu)的可拖动H体Ӟ使用“示例代?”所C的代码可以了?/font>
上面的代码只是一个示范性代码。具体的操作如下Q?/font>
首先QؓH体d一个私有域Q?/font>
private System.Drawing.Point mousePoint;
然后QؓH体d鼠标按下事g处理Ҏ(gu)Q我q里?span class="mycode">MainForm_MouseDownQ别忘了该Ҏ(gu)链接?span class="mycode">MainForm.MouseDown事gQ这不用多说了吧Q)Q?/font>
private void MainForm_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e) {
if(e.Button == MouseButtons.Left) {
this.mousePosition.X = e.X;
this.mousePosition.Y = e.Y;
}
}
在这里注意对鼠标按键q行{选?/font>
接下来,为窗体添加鼠标移动事件处理方法(我这里是MainForm_MouseMoveQ:
private void MainForm_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e) {
if(e.Button == MouseButtons.Left) {
Form.Top = Control.MousePosition.Y - mousePosition.Y
- SystemInformation.FrameBorderSize.Height - SystemInformation.CaptionHeight;
Form.Left = Control.MousePosition.Y - mousePosition.Y
- SystemInformation.FrameBorderSize.Width;
}
}
q里Q如果窗体没有标题栏Q可以去掉?span class="mycode">-SystemInformation.CaptionHeight”;如果H体没有Ҏ(gu)Q还可以L?span class="mycode">-SystemInformation.FrameBorderSize.Height”和?span class="mycode">-SystemInformation.FrameBorderSize.Width”?/font>
现在Q?zhn)是不是已l很清楚地明白如何用C#制作可拖动窗口了Q祝贺?zhn)Q最后,送?zhn)一个小C物—?/font> 桌面旉 。很z、很有意思哦~~~
另外赠送小技巧三则:
q个技巧我掌握的还不是很丰富,现在介绍一U最单的Ҏ(gu)——通过讄H体?span class="mycode">Region属性。首先,声明一?span class="mycode">System.Drawing.Drawing2D.GraphicsPath变量Q在q个变量中添加?zhn)期望作ؓH体轮廓的Ş状组合;之后Q从q个变量生成一?span class="mycode">System.Drawing.Region实例Qƈ赋给H体?span class="mycode">Region属性即可。如Q?/font>
GraphicsPath gp = new GraphicsPath();
gp.AddEllipse(0, 0, 120, 120);
Region r = new Region(gp);
this.Region = r;
上qC码添加到H体的构造函CQ我们就能够得到一个自定义的窗体了Q这个窗体是一个直径ؓ120像素的圆形(也是我的旉的外观哦Q?/font>
窗体的FormBorderStyle讄?span class="mycode">None卛_。这很简单事么?那么
首先窗体的ControlBox属性设|ؓfalseQ也是不要控制按钮Q窗体图标、最大最化按钮和关闭按钮)。按说这时就不应该有标题栏了Q但我们q能看到它很烦h地待在那里,因此Q我们要把窗体的Text属性设|ؓI(注意?span class="mycode">String.EmptyQ而不?span class="mycode">nullQ?/font>