博文
服务器控件添加客户端脚本代码(2007-01-11 11:11:00)
摘要:对于asp控件:
<asp:Button ID="Buttonsub" runat="server" Text="ceshi"/>
需要在form的Onload时间中添加:
function initHandler()
{
var elem = document.form1.Buttonsub;
if(elem)
{
elem.onclick = submitClientHandler;
}
}
function submitClientHandler(){
alert("按钮单击了!");
}
具体可以参照:
http://www.cnblogs.com/anderslly/archive/2006/09/30/doublesidesevent.html......
判断点是否在多边形中的方式(2006-08-23 17:49:00)
摘要:判断点是否在多边形中的方式:
搜索网络资源,发现判断点是否在多边形内的方式一般是以点为射线端点,向另一无穷远处做射线,判断此条射线与多边形各条边的相交情况,如果相交次数为奇数,认为点在多边形内或在多边形上,否则,认为点在多边形外.如图
这个方法无非就是判断相交次数.
具体操作时,可以简化一下:
看上图,如果要判断p1x,p1y点是否在多边形内,只需要取能够与之相交的线段进行判断而已.我这里恒认为x轴为0,y轴与测试点相同的点为射线的另一段,那么,只有y值在测试点p1y上下的线段才是我们要测试的线段,比如上图中的x3,y3和x4,y4,那么有此条件,判断设想是否和x3y3x4y4相交无非就是判断p1.X > Max(x3.X,x4.X)而已,如果成立,则射线与x3y3x4y4线段相交,如果线段的两个端点的Y值均大于或均小于p1的Y值,则无判断的必要.因为它们不可能相交.
如果是p2xp2y的情况则需要做跨立判断,因为p2x介于x4x和x5x之间,p2y介于x4y和x5y之间.
假设,p2和x4x5相交,那么它们的交点tmpP的X必定小于p2X,tmpY必定等于p2Y,
我们做x4y4x5y5的直线方程:
ax + by + c = 0
a = y5-y4
b = x5-x4
c = (x5-x4)y4 –(y5-y4)x4
令y=p2Y;
那么x = (x5-x4)p2Y + ((x5-x4)y4 –(y5-y4)x4)/(y4-y5)
如果x < p2X,那么两线相交,否则两线不相交.......
一些脚本方法存档(2006-07-28 17:06:00)
摘要://往下拉框/ListBox添加节点
var option = document.createElement("option");
option.appendChild(document.createTextNode("测试节点"));
option.value="测试节点"';
models.appendChild(option);
//控制DIV层的显示关闭,样式
vmsg.style.visibility = "hidden"; //vmsg是DIV的的ID,控制DIV隐藏
vmsg.style.visibility = "visible"; //vmsg是DIV的的ID,控制DIV显示
vmsg.style.left =100;//控制DIV距离页面左边100
//使用自定义的结构
//服务器端:
class Student
{
public string Name;
public string age;
}
//客户端获取到服务器端的Student数据
function GetStudentCallBack(response)
{
var _Student = response.value;
alert(_Student.Name);
}......
在Java脚本中动态添加Ifram(2006-07-28 16:43:00)
摘要:function OpenUnitInfo(){
var shtml = "<iframe id=frmBody src=Reristed.aspx width=750 height=560> </iframe>"; //Reristed.aspx就是要在IFram框架中插入的页面
document.getElementById("ifrm").innerHTML = shtml; //ifrm可以是TD,DIV标签
}......
AJAX中使用JAVA脚本访问DataSet数据(2006-07-28 16:38:00)
摘要:在AJAX中从服务器获取的DataSet数据的访问:
var dt = response.value.Tables[0]; //dt就是DataSet的表0
for (var i = index;i < dt.Rows.length;i++)//遍历数据行
var rowvalue = dt.Rows[i].Name;//获取Name字段的值
dt.Columns.length //获取表中字段的数量
dt.Rows.length //获取表中行的数量
var row = dt.Rows[i][dt.Columns[k].Name];//获取行i字段k的值
下面的例子,处理了按dt的数据构造一个table显示在指定的td节点中,并按实际行大小添加了上一页下一页的导航按钮:
function NextPage(pgIndex) {
//表头 var shtml ="";
var tdWidth = 50;
if(_Resuldt.Columns.length > 10) {
shtml = "<TABLE cellSpacing=0 cellPadding=0 border = 1 width="+_Resuldt.Columns.length * 40+ ">" +
"<tr height=18 bgcolor=#cccc99> ";
tdWidth = 40;
}
else {
shtml ="<TABLE cellSpacing=0 cellPadding=0 border = 1 width=730><tr height=18 bgcolor=#cccc99&......
Ajax使用入门(2006-03-30 14:13:00)
摘要:AJAX
最近在网上下载了一个AJAX的DLL,使用了一下,有一些感受:
使用AJAX的确可以避免页面的刷新实现浏览器/客户端的页面交互,尤其是进行数据库数据查询,一些需要在服务器处理的业务逻辑时尤为好用,不过用了一段时间,发觉这东西入门比较简单,但是深入的使用还是很困难。
Ajax技术实质上是一种异步的浏览器请求/服务端响应的技术,很早就出来了,但是直到前不久才被广而使用,这可能是Google的功劳。使用Ajax可以带来很好的客户体验,大量的减少网络流量,降低服务端的压力,总总好处,使我们迫切的想用一下,但是我研究了这么多天,还是没研究明白。
Ajax.dll是对Ajax技术的一个封装,
http://www.microsoft.com/china/msdn/library/webservices/asp.net/ASPNetSpicedAjax.mspx
可以得到其技术的介绍和下载。
Ajax.dll使用入门:
首先,在C#Web窗体应用程序中添加对Ajax.dll的引用;
在WebConfig.config中的<system.web>节点下添加以下内容:
<httpHandlers>
<!-- Register the ajax handler -->
<add verb="POST,GET" path="AjaxPro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro" />
</httpHandlers>
上面的内容实际上是增加Ajax类对http请求的响应,ajax会拦截来自浏览器的请求,并根据请求做响应。
在页面的代码中添加ajax对类的注册:
private void Page_Load(object sender, System.EventArgs e)
{
AjaxPro.Utility.RegisterTypeForAjax(typeof(DataAccess)); //......
关于Web页面上屏幕坐标和地图坐标的转换思路(2006-03-30 13:41:00)
摘要:最近学习了一下MapXtreme 2004开发网页GPS定位;研究了近半月,觉得自己对JAVA脚本实在不熟悉,网页框架控制也不太好做,尤其是浏览器和服务端的交互问题一直比较难控制。
要在地图上显示GPS车辆位置,有2个办法:一个是在Map控件的地图中添加一层,然后利用已知的经纬度生成地图图元,然后在发送到浏览器,这种方式的缺点就是必须刷新浏览器才能得到最新的地图信息(包含新添加或者移动的图元),效率比较低;
另外一种方式是通过浏览器脚本实现:
首先,地图刷新到客户端浏览器的时候,把当前地图的Center、Scale、以及利用DisplayTransform.FromDisplay得到的原点(屏幕位置0,0)对应的经纬度信息一并写到浏览器端的Cookie中去;(这里说明一下,为什么要这么做呢?因为如果浏览器和服务端信息的交互势必要造成页面的刷新(可能是我没控制好),使用ajax技术又会出现地图控件没定义的问题,所以暂时我还只能把浏览器脚本可能用到的参数写到浏览器);
有了这几个参数,屏幕坐标、地图坐标的互换就简单多了:
这是相关的浏览器Java脚本:
///读取中心点,视野,原点
var centerx = 0.0;//中心x坐标
var centery = 0.0;//中心y坐标
var zooms = 0.0;//地图视野
var zerox = 0.0;// 原点X经度
var zeroy = 0.0;// 原点Y纬度
function loadzoom()
{ centerx = parseFloat(readcookie("CenterX"));
centery = parseFloat(readcookie("CenterY"));
zooms = parseFloat(readcookie("Zoom"));
zerox = parseFloat(readcookie("ZeroX"));
zeroy = parseFloat(readcookie("ZeroY"));
var s = "当前地图视野:" + zooms*1.609 + "KM\r\n" + "中心X:" + centerx +"\r\n" + "中心Y:" + centery + "......
多线程模式或异步模式下窗口编程中可视控件的操作(2006-01-11 13:19:00)
摘要:今天写一个动态增加tabpage的程序,在程序中使用了异步加载tabpage的模式,源代码:
delegate void AddTabPageMethmod(TabPage page);
private void AddTabPage(TabPage page)
{
this.tabControl1.TabPages.Add(page);
}
在线程中处理的时候这样调用:
AddTabPageMethmod methAddPage = new AddTabPageMethmod (AddTabPage);
TabPage page = new TabPage();
page.Name = "TabPage";
page.Text = "AddNewPage";
methAddPage.BeginInvok(page,null,null);
但是在实际运行中,执行到 this.tabControl1.TabPages.Add(page);时程序就没有任何响应,
如果不使用异步委托,直接调用AddTabPage(page);也不成功,百思不得其解
后来看了一些资料,原来使用的线程不对,要在窗体的主线程上执行才能正确执行:
this.BeginInvok(methAddPage,new object[]{page});
这里,this指主窗体.
搞定.......
关于异步Socket接收模式下的Socket缓冲区(2006-01-04 11:27:00)
摘要:在使用Socket的 异步接收时,需要定义一个对象:
/// <summary>
/// 传输对象
/// </summary>
public class TranslateObj
{
/// <summary>
/// 缓冲区
/// </summary>
public byte[] bytes;
/// <summary>
/// 缓冲区大小
/// </summary>
public const int BUFFER_SIZE = 512;
/// <summary>
/// 存放重复接收数据的列表
/// </summary>
public ArrayList tmpAl;
/// <summary>
/// 接收/发送数据的Socket
/// </summary>
public Socket csock;
public TranslateObj()
{
this.csock = null;
this.bytes = new byte[BUFFER_SIZE];
this.csock = null;
}
~TranslateObj()
{
this.tmpAl = null......
WebService服务中修改接口说明(2005-12-31 11:55:00)
摘要:默认的WebService接口始终是没有任何提示的,但是如果在接口前添加
[WebMethod(Description="http://www.scstjw.net ",
EnableSession=false)]
就可以在访问该接口时,在接口下方显示"http://www.scstjw.net";
可以利用此方式,为Web服务添加接口说明
......