因为自定义控件里面写了事件,form里面再给自定义控件添加事件无效,怎么解决?

这是写在自定义控件的代码里面的

    public void Commodity_Click(object sender, EventArgs e)
    {

    }

这是写在form窗体的代码里面的

 private void commodity_HotDishes1_Click(object sender, EventArgs e)

但是只有自定义控件里面的代码会执行,form里面同样的事件好像被覆盖了

c#

2个回答

可以使用,添加断点到程序,单击控件后运行**Click 的顺序 ** ,在按F11 逐步运行。看看自己的程序时怎么运行的。
关于无法执行,应该是没有运行条件。。。。看看事件里添加的内容。

需要委派(delegate) 要在form那層注冊事件

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C#自定义用户控件添加实体
添加实体,比如说在form界面上有一个要添加到地图(这个地图是别人封装好的自定义控件)里的图标,点击那个图标以后放到地图上,它就加进去,然后同时弹出一些参数编辑框,这个参数编辑框就是它的一些要保存的参数。这个实体对象就是要加在那个已经封装好的自定义控件里面。
C#窗体控件阴影效果和自定义的控件如何实现阴影效果
1.Win7系统小开启“窗体阴影”效果后,VS2012环境 2.无边框窗体通过SetClassLong、GetClassLongAPI可以实现窗体阴影效果。但该窗体添加至控件中时,阴影效果消失,如何能强制显示阴影效果? 3.自定义的控件如何实现阴影效果? 谢谢! ----------------- 运行结果:外层窗体(Form1)有阴影效果,内层窗体(f)无阴影效果。 ----------------- 代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; //API函数加载,实现窗体边框阴影效果 SetClassLong(this.Handle, GCL_STYLE, GetClassLong(this.Handle, GCL_STYLE) | CS_DropSHADOW); Form f = new Form(); f.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; f.BackColor = Color.Peru; f.Width = 200; f.Height = 200; f.Location = new Point(50, 50); f.TopLevel = false; this.Controls.Add(f); f.Show(); SetClassLong(f.Handle, GCL_STYLE, GetClassLong(f.Handle, GCL_STYLE) | CS_DropSHADOW); } #region 窗体边框阴影效果变量申明 const int CS_DropSHADOW = 0x20000; const int GCL_STYLE = (-26); //声明Win32 API [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int SetClassLong(IntPtr hwnd, int nIndex, int dwNewLong); [DllImport("user32.dll", CharSet = CharSet.Auto)] public static extern int GetClassLong(IntPtr hwnd, int nIndex); #endregion }
C#做上位机时自定义了一个控件,控件对↑键做出反应,发现方向键不好使,按键事件进不去,求助大神!
![图片说明](https://img-ask.csdn.net/upload/201510/06/1444131528_550214.png) 控件主要是想做一个显示速度的条,当按↑时格子文本框变色 using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Linq; using System.Text; using System.Windows.Forms; namespace SpeedBar { public partial class SpeedBar : UserControl { private Int16 SpeedBarflag = 0; public SpeedBar() { InitializeComponent(); } private void SpeedBar_KeyDown(object sender, KeyEventArgs e) { Keys key = e.KeyCode; switch (key) { //↑按键 case Keys.Up: SpeedBarflag ++; if(SpeedBarflag >5) SpeedBarflag=5; if (SpeedBarflag >= 1 && SpeedBarflag<6) { switch(SpeedBarflag) { case 1: SpeedBar1.BackColor=System.Drawing.Color.Red; break; case 2: SpeedBar2.BackColor=System.Drawing.Color.Yellow; break; case 3: SpeedBar3.BackColor=System.Drawing.Color.Green; break; case 4: SpeedBar4.BackColor=System.Drawing.Color.Blue; break; case 5: SpeedBar5.BackColor=System.Drawing.Color.Black; break; } } if (SpeedBarflag > -5 && SpeedBarflag< 1) { switch(SpeedBarflag) { case -4: SpeedBarminus5.BackColor=System.Drawing.Color.White; break; case -3: SpeedBarminus4.BackColor=System.Drawing.Color.White; break; case -2: SpeedBarminus3.BackColor=System.Drawing.Color.White; break; case -1: SpeedBarminus2.BackColor=System.Drawing.Color.White; break; case 0: SpeedBarminus1.BackColor=System.Drawing.Color.White; break; } } break; //↓按键 case Keys.Down: SpeedBarflag --; if(SpeedBarflag <-5) SpeedBarflag=-5; if (SpeedBarflag <= -1 && SpeedBarflag>-6) { switch(SpeedBarflag) { case -1: SpeedBarminus1.BackColor=System.Drawing.Color.Red; break; case -2: SpeedBarminus2.BackColor=System.Drawing.Color.Yellow; break; case -3: SpeedBarminus3.BackColor=System.Drawing.Color.Green; break; case -4: SpeedBarminus4.BackColor=System.Drawing.Color.Blue; break; case -5: SpeedBarminus5.BackColor=System.Drawing.Color.Black; break; } } if (SpeedBarflag < 5 && SpeedBarflag> -1) { switch(SpeedBarflag) { case 4: SpeedBar5.BackColor=System.Drawing.Color.White; break; case 3: SpeedBar4.BackColor=System.Drawing.Color.White; break; case 2: SpeedBar3.BackColor=System.Drawing.Color.White; break; case 1: SpeedBar2.BackColor=System.Drawing.Color.White; break; case 0: SpeedBar1.BackColor=System.Drawing.Color.White; break; } } break; } } } } 一直想不通为啥按键无效,一直找不到焦点一样,Form有一个keypreview好像是管这个的,可自定义控件里没这个选项。。。求助求助,谢了
怎样将c#自定义的textbox与自带textbox组成控件数组?
无法将“”类型隐式转换为“system.windows.forms.textbox” 除tc外其他都是自定义textbox TextBox[,] arr; private void Form1_Load(object sender, EventArgs e) { //初始化数组 arr = new TextBox[18, 8]{{tc1,hd1,zd1,ys1,chz1,sd1,cez1,duz1}, {tc2,hd2,zd2,ys2,chz2,sd2,cez2,duz2}, {tc3,hd3,zd3,ys3,chz3,sd3,cez3,duz3}, {tc4,hd4,zd4,ys4,chz4,sd4,cez4,duz4}, {tc5,hd5,zd5,ys5,chz5,sd5,cez5,duz5}, {tc6,hd6,zd6,ys6,chz6,sd6,cez6,duz6}, {tc7,hd7,zd7,ys7,chz7,sd7,cez7,duz7}, {tc8,hd8,zd8,ys8,chz8,sd8,cez8,duz8}, {tc9,hd9,zd9,ys9,chz9,sd9,cez9,duz9}, {tc10,hd10,zd10,ys10,chz10,sd10,cez10,duz10}, {tc11,hd11,zd11,ys11,chz11,sd11,cez11,duz11}, {tc12,hd12,zd12,ys12,chz12,sd12,cez12,duz12}, {tc13,hd13,zd13,ys13,chz13,sd13,cez13,duz13}, {tc14,hd14,zd14,ys14,chz14,sd14,cez14,duz14}, {tc15,hd15,zd15,ys15,chz15,sd15,cez15,duz15}, {tc16,hd16,zd16,ys16,chz16,sd16,cez16,duz16}, {tc17,hd17,zd17,ys17,chz17,sd17,cez17,duz17}, {tc18,hd18,zd18,ys18,chz18,sd18,cez18,duz18}}; }
自定义DataGridview下拉输入不同单元就不显示了
using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; using System.Data; using System.Text; using System.Windows.Forms; using System.Drawing.Design; using System.Data.Common; using System.Data.SqlClient; namespace datagridcell{ public class CellTextBox : ToolStripDropDown { private ToolStripControlHost dataGridViewHost; private DataTable dataTable = new DataTable(); SqlConnection cn = new SqlConnection("Data Source=.;Initial Catalog=xxx;Persist Security Info=True;User ID=sa;Password=system"); SqlCommand cm = new SqlCommand(); DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); SqlCommandBuilder cb = new SqlCommandBuilder(); public DataTable CdataTable { get { return dataTable; } set { DataGridView.DataSource = value; dataTable = value; } } public CellTextBox() { DataGridView dataGridView = new DataGridView(); dataGridView.ScrollBars = ScrollBars.Both; dataGridView.AutoSize = true; dataGridView.AllowUserToAddRows = false; dataGridView.AllowUserToDeleteRows = false; dataGridView.AllowUserToResizeRows = false; dataGridView.Dock = DockStyle.Fill; dataGridView.BorderStyle = BorderStyle.None; dataGridView.ReadOnly = true; dataGridView.AllowUserToAddRows = false; dataGridView.RowHeadersVisible = false; dataGridView.AutoSize = false; dataGridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; //设置DataGridView的数据源 Form frmDataSource = new Form(); frmDataSource.Controls.Add(dataGridView); frmDataSource.SuspendLayout(); dataGridViewHost = new ToolStripControlHost(dataGridView); dataGridViewHost.Margin = new Padding(2, 2, 2, 2); dataGridViewHost.Padding = Padding.Empty; dataGridViewHost.AutoSize = false; this.Items.Clear(); this.Items.Add(dataGridViewHost); this.AutoClose = true; //是否自动关闭 /** * 第一种数据显示 * */ //DataTable dt = new DataTable(); //dt.Columns.Add("编号"); //dt.Columns.Add("姓名"); //dt.Columns.Add("部门"); //dt.LoadDataRow(new string[] { "1003", "小张", "a" }, true); //dt.LoadDataRow(new string[] { "1004", "小王", "a" }, true); //DataGridView.DataSource = dt; /** * 第二种数据显示 * */ //cm = new SqlCommand(" SELECT TOP 10 code ,name FROM zd_sex_code ", cn); //da = new SqlDataAdapter(cm); //da.SelectCommand = cm; //da.Fill(ds, "zd_sex_code"); ////cellTextBox1.DataGridView.DataSource = ds.Tables["zd_sex_code"]; //DataGridView.DataSource = ds.Tables["zd_sex_code"]; } public DataGridView DataGridView { get { return dataGridViewHost.Control as DataGridView; } } public void ShowDropDown(Control control) { if (this != null) { Point point = control.Location; point.Offset(0, control.Height + 2); this.Show(control, point); } } public void CloseDropDown() { this.Close(); } } } 在别的窗体如 :textbox 下绑定 重写给datagridview赋值就不显示
input自定义required提示后,用城市选择控件输入了内容,还是提示
``` <input type="text" name="start" class="form-control" id="citySelect" placeholder="城市名" required oninvalid="setCustomValidity('请输入城市名')" oninput="setCustomValidity('')"> ``` ![图片说明](https://img-ask.csdn.net/upload/201703/31/1490923245_159609.png)
Arcengine +C# 中窗体之间调用AO控件的问题
简答的说有两个窗体 想要简单的在Form2中调用Form1的Axmapcontrol1的get_layer() _方法 comboBox1.Items.Add(frm.axMapControl1.get_Layer(i).Name); 我自己的方式是在Form1中把axmapcontrol1的属性设置为public然后在Form2中定义一个Form变量来调用 为什么值始终传不过去 而非AO控件可以这样传值
C#委托来调用窗体的控件
Form1类里的代码 public Class1 cla; private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); cla.run1(); } private void Form1_Load(object sender, EventArgs e) { cla = new Class1(this,LK); } void LK() { button1.Text = "abc"; } Form2类里的代码 public Class1 cla; void ds() { this.button1.Text = "def"; } private void button1_Click(object sender, EventArgs e) { cla = new Class1(this, ds); cla.run2(); } Class1类里的代码 public delegate void Del1(); public Del1 _del1; public Class1(Form1 f1, Del1 del) { this._del1 = del; } public delegate void Del2(); public Del2 _del2; public Class1(Form2 f2, Del2 del) { this._del2 = del; } public void run1() { Thread th = new Thread(a); th.Start(); } public void run2() { Thread th = new Thread(b); th.Start(); } public void a() { try { _del1();//不为空,可以执行 } catch (Exception e) { MessageBox.Show("a中的方法:\n"+e.ToString ()); } } public void b() { try { _del1();//问题在这,这里委托的方法为空,为什么,上面的怎么不为空? _del2(); } catch (Exception e) { MessageBox.Show("b中的方法:\n" + e.ToString()); } } 问题:在Class1 类里(有注释)。很急,求各位大神帮帮忙。 问题的要义就是在自定义的类里新起一条线程来调用窗体的控件,我是通过委托的方法执行,但在传这个方法(需要委托的方法)的参数时,在Class1的构造方法中检验是可以传进来的,但调用的时候就为空了。 再次求各位大神帮帮忙。
C# Winfrom项目,运行程序一段时间后提示“内在不足”的报错信息。
在C# Winfrom项目,有一个form窗体,六个Panel控件(用于放置显示监控视频图像的用户自定义控件), 还有一个timer计时器控件(设置每隔2分钟调用其它六个监控视频图像放到对应的Panel控件) 目前遇到的问题是,监控点的视频图像有的由于网络好点显示加载视频图像快点,有的由于网络不是太好加载显示视频图像慢点。 在form窗体运行一段时间后,导致这个form窗体的六个Panel控件在轮流显示相应的六个监控视频图像后,提示“内在不足”的报错信息。 发现在这个时间段内,电脑CPU的使用率为90%至100%之间。 是不是将timer计时器控件的时间间隔设置多点(例如设置每隔6分钟)或者将运行这个程序电脑的硬件配置再改善下,硬件配置高点。请问这样可以解决此问题吗? 还是有其它的办法解决此问题?最好能提供相关的参考资料。谢谢!
如何获取同一个form表单里的对象的value值呢
``` <input type="hidden" id="district<%=i%>" name="district" > <script> document.getElementById("district"+i).value=document.getElementById("shuru"+i).value </script> ``` 如题,我想将hidden里的value 设置为上面id为shuru的的值 ``` <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@page import="Db.Db"%> <%@page import="java.text.SimpleDateFormat"%> <%@ page import="java.sql.*"%> <%@ page import="java.util.Date"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!-- 修改前--> <% request.setCharacterEncoding("utf-8"); String uaddr = null; int uid = 0; String uname = request.getParameter("uname"); String[] strgid = request.getParameterValues("addOrders"); Connection conn = null; Statement stmt = null; Statement stmt1 = null; ResultSet rs = null; ResultSet rs1 = null; conn = Db.getconn(); stmt = conn.createStatement(); stmt1 = conn.createStatement(); System.out.println(uname); rs1 = stmt1.executeQuery("select * from user where uname = '"+ uname + "' "); if (rs1.next()) { uaddr = rs1.getString("uaddr"); uid = rs1.getInt("uid"); } %> <% SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowTime = sdf.format(new Date()); %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>购物车</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <form method="post" action="servlet/AddOrdersServlet" name="numSender"> <input type="hidden" name="uid" value="<%=uid%>"> <input type="hidden" name="uname" value="<%=uname%>"> <input type="hidden" name="oaddr" value="<%=uaddr%>"> <input type="hidden" name="dealtime" value="<%=nowTime%>"> <!-----script放到循环外-------> <script type="text/javascript"> function jianC(i,p1) { /*定义变量K,用商品数量输入框里面的数字赋值*/ var k =document.getElementById("shuru"+i);//获取数量输入控件 var v=parseInt(k.value,10); v--; /*点击-号按钮会递减商品价格*/ if (v < 1) { alert("亲,商品数量不能小于1!"); return//超限退出 } k.value=v; k.setAttribute('sum',v*p1)//将这个物品的小计放到自定义属性sum中,方便计算总价 setTotal()//重新设置总价钱 } function adddC(i,p1) { /*点击+号按钮会递加商品数量*/ var k =document.getElementById("shuru"+i);//获取数量输入控件 var v=parseInt(k.value,10); v++; if (v > 99) { alert("您所选择的数量已经到达库存上限!"); return//超限退出 } k.value=v; k.setAttribute('sum',v*p1)//将这个物品的小计放到自定义属性sum中,方便计算总价 setTotal()//重新设置总价钱 } function setTotal(){//设置总价 var o=document.getElementsByName('init_num');//获取数量输入框 var sum=0; for(var i=0;i<o.length;i++)sum+=parseInt(o[i].getAttribute('sum')||0) document.getElementById("cost").value = sum + "元" } function sendNum() { alert("xxxxxx"); document.getElementById("district"+i).value=document.getElementById("shuru"+i).value; alert("aaaaaaaaaaa"); } </script> <table border=1 align="center"> <tr> <td colspan="4" align="center">购物车</td> </tr> <tr> <td align="center">商品</td> <td align="center">数量</td> <td align="center" colspan="1">操作</td> </tr> <% for (int i = 0; i < strgid.length; i++) { int gid = Integer.parseInt(strgid[i]); rs = stmt.executeQuery("select * from goods where gid =" + gid); if (rs.next()) { String strgprice = rs.getString("gprice"); Double p =Double.parseDouble(strgprice); // System.out.println("p="+p); %> <!-- ss --> <tr> <td><img src="<%=rs.getString("gpicture")%>">&nbsp;<%=rs.getString("gname")%></td> <td><input type="button" id="jian" onClick="jianC(<%=i%>,<%=p%>)" value="-"><!-----传入循环i和单价-------> <input id="shuru<%=i%>" name="init_num" class="input_text" type="text" value="0" size="3"><!-----id连接上i变为唯一-------> <input type="hidden" id="district<%=i%>" name="district" > <script> document.getElementById("district"+i).value=document.getElementById("shuru"+i).value </script> <input type="button" id="addd" onClick="adddC(<%=i%>,<%=p%>)" value="+"><!-----传入循环i和单价-------></td> <td> <input type="checkbox" name="gid" value="<%=gid %>"> </td> </tr> <% } } rs.close(); rs1.close(); stmt.close(); stmt1.close(); conn.close(); %> <tr> <td colspan="4" align="center"> 总价:<input id="cost" class="input_text" type="text" value="0" size="3" value="0"></td> </tr> <tr> <td colspan="5" align="center"> <button id="buy_anniu" type="submit" onClick="sendNum()">提交</button> <button type="reset">重置</button> </td> </tr> </table> </form> </body> </html> ```
如何extend可以附带参数的控件【combobox】??
[quote]现在项目里有这样定义继承的控件,这个是不需要带参数的用法,直接查出所有的列表[/quote] [code="java"] Ext.app.Module = function(config){ Ext.apply(this, config); Ext.app.Module.superclass.constructor.call(this); this.init(); } //--------- Modules.CreatedUserCombo = Ext.extend(Ext.form.ComboBox,{ store:new Ext.data.JsonStore({ url:'xx.do?format=json', root:'data.accountList', fields:['userName'] }), fieldLabel:'Created User', displayField:'userName', valueField:'userName', triggerAction:'all' }); Ext.reg('createduser',Modules.CreatedUserCombo); [/code] [quote]然后就可以这样使用自定义控件了:[/quote] [code="java"] { xtype : 'createduser', name : 'createdUser' } [/code] [quote]现在我希望能够使用自带参数,并将参数传递给jsonStore,然后向如下一样使用:[/quote] [code="java"] { xtype : 'createduser', name : 'createdUser', baseParams : {customer: id} } [/code] [quote]请问各位高手,该如何定义和使用呢?[/quote] [b]问题补充:[/b] [quote]还是不行啊,是不是传值传早了或者传晚了?不知道EXT底层的到底怎么extend的啊。。。[/quote] [code="java"]Modules.CreatedUserCombo = Ext.extend(Ext.form.ComboBox,{ store:new Ext.data.JsonStore({ url:'xx.do?format=json', root:'data.accountList', fields:['userName'], baseParams: this.baseParams||{},//这样还是显示不了 // baseParams: {customer: '8861008555'}, //这样可以成功 autoLoad : true }), fieldLabel:'Created User', displayField:'userName', valueField:'userName', triggerAction:'all' }); [/code]
求助大神!! C# 用委托不同窗体传值的问题
我在网上看到的例子,自己试了下,有FORM1和FORM2两个窗体,分别有Button1和TextBox1两个控件,如下图: ![图片说明](https://img-ask.csdn.net/upload/201610/12/1476276710_26169.png) FORM1代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } public delegate void mydelegate(string text);//定义一个委托 public event mydelegate myevent;//定义上诉委托类型的事件 private void button1_Click(object sender, EventArgs e) { Form2 fm2 = new Form2(); fm2.Show(); if (myevent != null) { myevent(textBox1.Text); } } ![图片说明](https://img-ask.csdn.net/upload/201610/12/1476276724_366433.png) FORM2代码: public Form2() { InitializeComponent(); } string namedis; private void button1_Click(object sender, EventArgs e) { Form1 fm1 = new Form1(); fm1.myevent += new Form1.mydelegate(givevalue);//订阅FORM1的事件,调用givevalue()方法. textBox1.Text = namedis; } public void givevalue(string text) //用于修改textbox的方法 { this.namedis = text; } 向FORM1的TextBox1输入值,Button1触发传值和弹出FORM2; FORM2的Button1触发在TextBox1中显示传过来的值。 现在问题来了:FORM2的TextBox1始终显示为空,得不到FORM1传过来的值。这是调试界面,myevent值为null,这是为什么啊? ![图片说明](https://img-ask.csdn.net/upload/201610/12/1476277109_6000.png)
NumberBox(textbox)的值重新修改不了,总输出是0,在NumberBox中输入其他数字总是输出0,求解
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" meta:resourcekey="PageResource1" enableEventValidation="false" viewStateEncryptionMode="Never"%> <%@ Register Assembly="B2CShop.Control" Namespace="B2CShop.Control" TagPrefix="cc1" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>无标题页</title> </head> <body> <form id="form1" runat="server"> <div> </div> <cc1:NumberBox ID="txtOrderIDAdd" runat="server" IsInt="True" /> <asp:Button ID="btnAddSubmit" runat="server" meta:resourcekey="btnAddResource1" OnClick="btnAddSubmit_Click" Text="确定" CssClass="button" /> </form> </body> </html> 后台代码: public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // this.txtOrderIDAdd.Value = "3"; } } protected void Button1_Click(object sender, EventArgs e) { } protected void btnAddSubmit_Click(object sender, EventArgs e) { System.Web.HttpContext.Current.Response.Write("<Script Language='JavaScript'>window.alert('" + this.txtOrderIDAdd.Value.ToString() + "');</script>"); } } ------ **自定义NumberBox控件类:** namespace B2CShop.Control { using System; using System.ComponentModel; using System.Web; using System.Web.UI; using System.Web.UI.HtmlControls; using System.Web.UI.WebControls; [DefaultProperty("Value"), ToolboxData("<{0}:NumberBox runat=server></{0}:NumberBox>")] public class NumberBox : WebControl { private HiddenField _ThisHidden01 = new HiddenField(); public NumberBox() { this.ViewState["IsInt"] = false; this.ViewState["Value"] = "0"; this.ViewState["ClientScriptOnChange"] = ""; this.ViewState["Class"] = ""; } protected override void OnPreRender(EventArgs e) { base.OnPreRender(e); ControlCommon.ResgiterJavascript(this.Page, base.GetType(), "Control_NumberBox"); } protected override void RenderContents(HtmlTextWriter output) { HtmlInputText text = new HtmlInputText(); this._ThisHidden01.ID = this.UniqueID + "_hid01"; text.ID = this.UniqueID + "_ctl01"; text.Value = this.Value; if (this.Width.Value != 0.0) { text.Style.Add("Width", this.Width.Value + ControlCommon.GetUnitTypeName(this.Width.Type)); } if (this.Class != "") { text.Attributes.Add("Class", this.Class); } if (this.MaxLength != "") { } text.Style.Add("ime-Mode", "disabled"); if (this.IsInt) { if (this.ClientScriptOnChange.Length > 0) { text.Attributes.Add("onblur", "return (IntBox_OnChange(" + this._ThisHidden01.ID + ") && " + this.ClientScriptOnChange + ");"); } else { text.Attributes.Add("onblur", "return IntBox_OnChange(" + this._ThisHidden01.ID + ");"); } text.Attributes.Add("onkeydown", "return IntBox_OnKeyDown();"); } else { if (this.ClientScriptOnChange.Length > 0) { text.Attributes.Add("onblur", "return (NumberBox_OnChange(" + this._ThisHidden01.ID + ") && " + this.ClientScriptOnChange + ");"); } else { text.Attributes.Add("onblur", "return NumberBox_OnChange(" + this._ThisHidden01.ID + ");"); } text.Attributes.Add("onkeydown", "return NumberBox_OnKeyDown();"); } text.Attributes.Add("maxlength", this.MaxLength); if (!this.Enabled) { text.Attributes.Add("readonly", "readonly"); } this._ThisHidden01.RenderControl(output); text.RenderControl(output); } [Category("Appearance"), Localizable(true), Description("设置Textbox的Class属性。"), Bindable(true), DefaultValue("")] public string Class { get { return (string)this.ViewState["Class"]; } set { this.ViewState["Class"] = value; } } [DefaultValue(""), Bindable(true), Category("Appearance"), Localizable(true), Description("设置或获取客户端脚本:内容变更事件.\n注意:但在控制内置变更事件之后触发,如果内置变更事件返回为false,则设置将不会被执行!")] public string ClientScriptOnChange { get { return (string)this.ViewState["ClientScriptOnChange"]; } set { this.ViewState["ClientScriptOnChange"] = value; } } [DefaultValue(false), Description("是否只能输入整数.\nTrue : 只能输入整数\nFalse: 可以输入实数."), Category("Appearance"), Bindable(true), Localizable(true)] public bool IsInt { get { return (bool)this.ViewState["IsInt"]; } set { this.ViewState["IsInt"] = value; } } [Localizable(true), Bindable(true), Description("设置或获取控件最大可输入的字符数!"), Category("Appearance"), DefaultValue("")] public string MaxLength { get { return ((this.ViewState["MaxLength"] == null) ? "8" : ((string)this.ViewState["MaxLength"])); } set { this.ViewState["MaxLength"] = value; } } [Description("设置或获取控件的值."), Bindable(true), Category("Appearance"), DefaultValue("0"), Localizable(true)] public string Value { get { string str = ""; if (base.DesignMode) { str = (string)this.ViewState["Value"]; } else if (HttpContext.Current.Request.Form[this.ID + "_hid01"] != null) { str = HttpContext.Current.Request.Form[this.ID + "_hid01"].ToString(); this._ThisHidden01.Value = str; } else { str = this._ThisHidden01.Value; } return ((str == "") ? "0" : str); } set { this._ThisHidden01.Value = value; if (base.DesignMode) { this.ViewState["Value"] = value; } } } } } -------------- 关联类 : ControlCommon.cs namespace B2CShop.Control { using System; using System.Web.UI; using System.Web.UI.WebControls; public static class ControlCommon { public static void CopyStyle(CssStyleCollection Desc, CssStyleCollection Src) { foreach (string str in Src.Keys) { if (Desc[str] != null) { Desc[str] = Src[str]; } else { Desc.Add(str, Src[str]); } } } public static string GetUnitTypeName(UnitType ut) { string[] strArray = new string[] { "", "px", "pt", "pc", "in", "mm", "cm", "%", "em", "ex" }; try { return strArray[Convert.ToInt32(ut)]; } catch { return ""; } } public static void ResgiterJavascript(Page pg, Type tp, string Filename) { try { if (!pg.ClientScript.IsClientScriptIncludeRegistered("B2CShop_" + Filename)) { pg.ClientScript.RegisterClientScriptInclude("B2CShop_" + Filename, pg.ClientScript.GetWebResourceUrl(tp, "B2CShop.Control.B2CShop.Control." + Filename + ".js")); } } catch { } } } }
关于针对IE浏览器打印解决弹窗的解决办法。
目前遇到一个项目需要IE浏览器打印功能,需要解决直接打印不弹出IE选择打印对话框的问题。 试了很多办法都没有解决到。 后来在网上找到PAZU浏览器打印控件,感觉不错,只需要按照下面方式设置即可解决直接打印不 弹出IE浏览器默认选择打印机的问题。 具体解决办法如下: 1.准备好原料PAZU 下载网址 http://www.4Fang.net/4ff/sc_setup.exe 2.准备好PAZU 开发包下载网址 http://www.4Fang.net/4ff/pazu.rar 下面即可开干: js代码如下: //直接打印 $(".print").click(function(){ //预先选中的纸张 var strDefaultPaper = 'A4'; String.prototype.trim = function () { return this.replace(/(^\s*)|(\s*$)/g, ""); } function isNum(n) { if (isNaN(n)) return false; return true; } /*跳过IE打印选择提示*/ var isPromtUser = false; /*页面设置*/ var sPaper = "A4"; var sPrinter = pazu.TPrinter.getDefaultPrinter().DeviceName; //alert(sPrinter); pazu.TPrinter.marginTop = 0; //属性 上边距 pazu.TPrinter.marginBottom =0; //属性 下边距 pazu.TPrinter.marginLeft = 0; //属性 左边距 pazu.TPrinter.marginRight = 0; //属性 右边距 pazu.TPrinter.footer = ""; //属性 页脚 pazu.TPrinter.header = ""; //属性 页眉 pazu.TPrinter.orientation = 1; //属性 整型:纸张方向 1=纵向 2=横向 pazu.TPrinter.paperName = sPaper; //属性 纸张大小名称 //pazu.TPrinter.printerName = sPrinter; //属性 打印机名称 pazu.TPrinter.isPrintBackground = false; //属性 是否打印背景 true / false pazu.TPrinter.isZoomOutToFit = true; //属性 是否缩放以适应大小打印 true / false //pazu.TPrinter.printTemplate = sPT; //属性 打印模板的URL pazu.TPrinter.copies = 1; //属性 打印份数 //pazu.TPrinter.range = range.value; //属性 页面范围 pazu.TPrinter.isCopyByCopy = false; //属性 是否整份打印结束后再打印下一份 true / false //pazu.TPrinter.getDefaultPrinter //方法 获得默认打印机的对象 //pazu.TPrinter.printToDefaultPrinter(); //方法 把要打印的字符串输送到默认打印机(配合getDefaultPrinter 使用) //pazu.TPrinter.getPaperForms //方法 返回所有纸张格式的列表,以vbCrlf 分割 //pazu.TPrinter.getPrinters //方法 返回一个打印机列表,以vbCrlf 分割 //pazu.TPrinter.createPaper //方法 按指定的宽度和高度创建自定义纸张 请看示例 //pazu.TPrinter.doPrint //方法 执行打印 //pazu.TPrinter.doPrint_ //方法 执行打印但是不进行页面参数设置 //pazu.TPrinter.doPreview //方法 打印预览 //pazu.TPrinter.doPageSetup //方法 执行页面参数的设置 //pazu.TPrinter.showPageSetup //方法 弹出页面设置窗口 //pazu.TPrinter.writeHTMLtoOfficeFile 方法 把HTML导出为Office EXCEL或者 Word格式文件 //要指定打印那个Frame只要用javascript 让那个Frame获得焦点就可以了 //注意:这种方式下是不能预览的,只能立即打印。否则预览看到的是整个网页,而不是指定的frame window.frames['myifrm'].focus(); //pazu.TPrinter.doPreview();//打印预览 pazu.TPrinter.doPrint(isPromtUser); }); }); Html代码如下: <div class="print">打印小票</div> <!--打印小票内容--> <div style="display:none"> <object classid="clsid:AF33188F-6656-4549-99A6-E394F0CE4EA4" codebase="http://localhost/Home/sc_setup.exe" id="pazu" name="pazu"> <param name="License" value="2AE816BA3A24A9BA3F01162E7BF420F4" /> </object> </div> <iframe frameborder="0" scrolling="0" height="0" width="0" src="Print_Info.html" name="myifrm" id="myifrm"></iframe> </div> 打印内容Html如下: <html> <head> <meta name="viewport" content="width=device-width" /> <title>打印</title> <meta http-equiv="Content-Language" content="utf-8"> <meta name="pragma" content="no-cache"> <meta name="cache-control" content="no-cache"> <meta http-equiv="EXPIRES" content="0"> <meta http-equiv="imagetoolbar" content="no"> <style type="text/css"> html, body, form { padding: 0; margin: 0; } .printinfo { /*width: 721px;*/ /*height: 360px;*/ position: absolute; margin-top: 10px; margin-left: 10px; } .printinfo li { width: 300px; height: 24px; font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; font-size: 14px; line-height: 24px; display: inline-block; list-style: none; } </style> </head> <body> <form name="form1" id="form1" method="post"> <div id="divprintctrl" style="height: 0px; display: none;"> </div> <div class="printinfo"> <li>&nbsp;&nbsp;<strong style="letter-spacing:3px;">超市购物清单</strong></li> <li>&nbsp;银联商户号:&nbsp;2017040100090001</li> <li>&nbsp;终端编号:&nbsp;989892293</li> <li>&nbsp;交易单号:&nbsp;CS2017080910298881</li> <li>&nbsp;交易日期:&nbsp;2017-05-10 10:20:22</li> <li>&nbsp;金&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;额:&nbsp;16.00</li> <li>&nbsp;支付方式:&nbsp;支付宝</li> </div> </form> </body> </html> 这样即可解决直接打印屏蔽打印机选择对话框问题
jsp页面往后台存储时间类型数据时发生错误Unknown Source
主要问题是前台使用mobiscroll控件写入input控件后 使用form submit提交数据 后台servlet使用getParameter获取input控件值 转换格式后传输到数据库中。数据库字段为mysql的date类型 但是现在报错显示at java.text.SimpleDateFormat.parse(Unknown Source) at java.text.DateFormat.parse(Unknown Source 附上代码 servlet: ``` @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); System.out.println("进来了submit!!!!"); work worksubmit=new work(); HttpSession session = request.getSession(); worksubmit.sete_name("sjn"); //(String)session.getAttribute("username"); SimpleDateFormat dd = new SimpleDateFormat("yyyy-MM-dd");// 定义格式 String choosedate=dd.format(request.getParameter("txttest")); System.out.println(choosedate); Date chooseDate = null; try { chooseDate = dd.parse(choosedate); } catch (ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } java.sql.Date sqlchooseDate = new java.sql.Date(chooseDate.getTime()); worksubmit.setw_date(sqlchooseDate);//change 日期格式 String testname=(String)request.getParameter("testname"); worksubmit.setw_title(testname); ///time 获得方式待写 int score =0; String content=(String)request.getParameter("feel");//心得内容 if(content != null) { score+=2; } worksubmit.setw_content(content); int achieve11=0; int achieve21=0; int achieve31=0; int achieve41=0; String achieve1=(String)request.getParameter("Fruit1"); String achieve2=(String)request.getParameter("Fruit2"); String achieve3=(String)request.getParameter("Fruit3"); String achieve4=(String)request.getParameter("Fruit4"); if (achieve1!= null) { score=score+2; achieve11=1; } if (achieve2!= null) { score=score+2; achieve21=1; } if (achieve3!= null) { score=score+2; achieve31=1; } if (achieve4!= null) { score=score+2; achieve41=1; } worksubmit.setachieve1(achieve11); worksubmit.setachieve2(achieve21); worksubmit.setachieve3(achieve31); worksubmit.setachieve4(achieve41); worksubmit.setw_score(score); DAOProxy DAOProxy=new DAOProxy(); try { if(DAOProxy.submit(worksubmit)){ request.getRequestDispatcher("worklist.jsp").forward(request,response);; return ; }else { return ; } } catch (Exception e) { e.printStackTrace(); } } ``` 前台jsp页面: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"> <title>日期选择</title> <!-- 引入JQ Mobile所需C2S --> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" /> <!-- 引入JQ 脚本文件提高对 JQmobile支持 --> <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <!-- 引入JQ Mobile所需脚本文件 --> <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> <!-- 引入mobiscroll插件 --> <script src="js/zepto.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.zepto.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.core.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.datetime.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.select.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.ios.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.android.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.android-ics.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.scroller.wp.js" type="text/javascript"></script> <script src="plugs/mobiscroll/js/mobiscroll.i18n.zh.js" type="text/javascript"></script> <link href="plugs/mobiscroll/css/mobiscroll.scroller.css" rel="stylesheet" type="text/css" /> <link href="plugs/mobiscroll/css/mobiscroll.scroller.sense-ui.css" rel="stylesheet" type="text/css" /> <!-- 配置mobiscroll插件 --> <script type="text/javascript"> $(function () { var curr = new Date().getFullYear(); var fun = function () { $('#txttest').scroller('destroy').scroller({ preset: 'date', minDate: new Date(2012, 3, 10), maxDate: new Date(2020, 12, 15), invalid: { daysOfWeek: [0, 6], daysOfMonth: ['5/1', '12/24', '12/25'] }, theme: $('#theme').val(), lang: 'zh' }); } $('.settings select').bind('change', function () { fun(); }); fun(); }); </script> </head> <body> <div data-role="page" data-theme="a"> <div data-role="header" data-position="fixed"> <h1>写作业</h1> <a href="http://localhost:8080/zhisland/plugs/mobiscroll/index.html" data-role="button" class="ui-btn-left">返回</a> </div> <form action="submitServlet" method="post"> <div id="choose" name="choose" data-role="content"> <label for="test" >选择日期:</label> </div> <div id="inputchoose"> <input name="txttest" id="txttest" placeholder="请选择日期" > </div> <style type="text/css"> #choose{ width:100px; float:left;} #inputchoose{ width:200px;float:left;} </style> <HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1> <div id="learn" data-role="content"> <label for="test" >学习文章:</label> </div> <div id="inputlearn"> <input name="testname" id="testname" placeholder="请填写学习文章题目" > </div> <style type="text/css"> #learn{ width:100px; float:left;} #inputlearn{ width:400px;float:left;} </style> <HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1> <div data-role="content" > <label for="name">心得体会:</label> <textarea id="feel" name="feel" style=" "></textarea> <!-- 禁止textarea自动增长 --> <script>$(function () { $("#feel").textinput("option", "autogrow", false); })</script> </div> <style> textarea.ui-input-text{min-height:200px;}</style> <HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1> <div data-role="content" > <label >自我评价:</label> <label for="1">1.听导读分享<input name="Fruit1" type="checkbox" value="1" /></label> <label for="2">2.不抱怨 不说累 尽己责<input name="Fruit2" type="checkbox" value="2" /></label> <label for="3">3.看家书点评<input name="Fruit3" type="checkbox" value="3" /></label> <label for="4">4.诵读课文<input name="Fruit4" type="checkbox" value="4" /></label> </div> <input type="submit" value="确定"> </form> <div data-role="footer" data-position="fixed"> <div data-role="navbar" data-position="fixed"> <ul> <li> <a href="http://localhost:8080/zhisland/plugs/mobiscroll/index.html"> <h3> 创建作业 </h3> </a> </li> </ul> </div> </body> </html> ``` 麻烦高手解决一下 第一次做,还不太懂。十分感谢!!
窗口中socket通信服务器向客户端发消息,客户端自动返回:繁忙,下面是客户端代码:
// 接收数据信息 public void ReceiveMsg() { while (true) { try { byte[] date = new byte[1024]; int recv = socket.Receive(date); string str = Encoding.UTF8.GetString(date,0,recv); } catch (SocketException ex) { } } } public void listTest(Object o, EventArgs e, String str) { this.richTextBox1.Text = str; } //设置控件状态 public void Status(Object o, EventArgs e) { lblStatus.Text = "连接成功."; button1.Enabled = false; } //回调(异步调用连接请求) private static void ConnectCallback(IAsyncResult er) { try { // 获取到异步操作信息 Socket client = (Socket)er.AsyncState; UpdateStatus(new Form1(), new EventArgs()); StateObjcet state = new StateObjcet(); state.workSocket = client; client.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); // Receive(client); // 结束挂起异步连接操作请求 //client.EndConnect(er); } catch(Exception e) { MessageBox.Show(e.ToString()); return; } } //异步发送信息 /// <summary> /// 异步发送 /// </summary> /// <param name="er"></param> private static void SendCallback(IAsyncResult er) { try { //获取异步对象异步操作信息 Socket Client = (Socket)er.AsyncState; //挂起异步 发送请求 int byteSend = Client.EndSend(er); } catch (Exception e) { MessageBox.Show(e.ToString()); } } /// <summary> ///读取Socket 套接字 /// </summary> /// <param name="client"></param> private static void Receive(Socket client) { try { StateObjcet state = new StateObjcet(); state.workSocket=client; client.BeginReceive(state.buffer,0,StateObjcet.BufferSize,0,new AsyncCallback(ReceiveCallback),state); }catch(Exception e) { MessageBox.Show(e.ToString()); } } /// <summary> /// 异步挂起 /// </summary> /// <param name="er"></param> private static void ReceiveCallback(IAsyncResult er) { try { //异步操作获取用户定义信息 StateObjcet state = (StateObjcet)er.AsyncState; Socket client = state.workSocket; //结束挂起异步读取 int bytebuffer = client.EndReceive(er); if (bytebuffer > 0) { UpdateList(new Form1(), new EventArgs(), Encoding.ASCII.GetString(state.buffer, 0, bytebuffer)); state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, bytebuffer)); client.BeginReceive(state.buffer, 0, StateObjcet.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); } else { if (state.sb.Length > 1) { response = state.sb.ToString(); } receiveDone.Set(); client.Close(); } } catch (Exception e) { MessageBox.Show(e.ToString()); } } private void button2_Click(object sender, EventArgs e) { if (richTextBox2.Text.Trim() == "") return; else if (richTextBox2.Text.Trim().ToLower() == "clear()") { richTextBox1.Clear(); richTextBox2.Text = ""; return; } else if (Regex.IsMatch(richTextBox2.Text.Trim().ToLower(), @"^[zoom(]+[\d]+[)]$")) { string str = richTextBox2.Text.ToLower(); int size = Convert.ToInt32(str.Substring(str.LastIndexOf('(') + 1, str.IndexOf(')') - str.LastIndexOf('(') - 1)); richTextBox1.Font = new Font("宋体", size, FontStyle.Bold); return; } try { Byte[] bs; string user = null; if (txtUser.Text.Trim() == "在此输入你的名字" || txtUser.Text.Trim() == "") { user = "我"; bs = Encoding.Unicode.GetBytes(string.Format("对方说:({0})\r\n{1}\r\n", DateTime.Now.ToString(),richTextBox2.Text.Trim())); } else { bs = Encoding.Unicode.GetBytes(string.Format("{0}说:({1})\r\n{2}\r\n", txtUser.Text.Trim(),DateTime.Now.ToString(),richTextBox2.Text.Trim())); user = txtUser.Text.Trim(); } bs = System.Text.Encoding.UTF8.GetBytes(richTextBox2.Text); //发现UTF8可支持中文,就用之 socket.BeginSend(bs, 0, bs.Length, 0, new AsyncCallback(SendCallback), socket); txt = string.Format("{0}说:({1})\r\n{2}\r\n", user, DateTime.Now.ToString(), richTextBox2.Text.Trim()); int tempLen = richTextBox1.Text.Length; richTextBox1.AppendText(txt); richTextBox1.Select(tempLen, txt.Length); richTextBox1.SelectionFont = new Font("宋体", 10); richTextBox1.SelectionColor = Color.Red; richTextBox2.Clear(); } catch(Exception ex) { MessageBox.Show("连接尚未建立!无法发送数据!" + ex.Message); } } private void getlocalip(string myip) //dw20150214 { // 获取到本机IP //自动获取到本机电脑端口 IP = IPAddress.Parse(txtIP.Text.Trim()); int point = Convert.ToInt32(txtPoint.Text.Trim()); endpoint = new IPEndPoint(IP, point); } private void Form1_Load(object sender, EventArgs e) { getlocalip(GetServerIP().ToString()); //dw20150214 //建立Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); } private void txtIP_TextChanged(object sender, EventArgs e) { } private void TheradScoket() { Thread TempThread; //开启接收线程 TempThread = new Thread(new ThreadStart(this.ToConnect)); TempThread.IsBackground = true;//设置为后台线程 TempThread.Start(); TempThread.Abort();//关闭线程 Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //关闭套接字 client.Close(); } private void Form1_FormClosing(object sender, FormClosingEventArgs e) { TheradScoket(); // socket.Close(); } } }
EXT如何给WINDOW弹窗传值
Ext.onReady(function() { // 设备类型 var devBoxs = [["#1办公楼", "#1办公楼"], ["#2办公楼", "#2办公楼"]] var proxy = new Ext.data.MemoryProxy(devBoxs); var reader = new Ext.data.ArrayReader({}, [{ name : "devTypeName", type : "string", mapping : 0 }, { name : "devTypeName", type : "string", mapping : 1 }]) var store = new Ext.data.Store({ proxy : proxy, reader : reader, autoLoad : true }) var devBoxCombox = new Ext.form.ComboBox({ name : "devTypeCode", width : 220, fieldLabel : "房间位置", hiddenName : "devTypeCode", triggerAction : "all", editable : false, store : store, displayField : "devTypeName", valueField : "devTypeName", emptyText : "please check!", value : "A机房" }) // 设备类型 var devBoxWheres = [["网络组", "网络组"]]; var proxy = new Ext.data.MemoryProxy(devBoxWheres); var reader = new Ext.data.ArrayReader({}, [{ name : "devTypeName", type : "string", mapping : 0 }, { name : "devTypeName", type : "string", mapping : 1 }]) var store = new Ext.data.Store({ proxy : proxy, reader : reader, autoLoad : true }) var devWhereCombox = new Ext.form.ComboBox({ name : "devTypeCode", width : 220, fieldLabel : "所属部门", hiddenName : "devTypeCode", triggerAction : "all", editable : false, store : store, displayField : "devTypeName", valueField : "devTypeName", emptyText : "please check!", value : "36#" }) var roomForm = new Ext.form.FormPanel({ width : 620, autoHeight : true, frame : true, bodyStyle : "padding:5px", layout : "form", labelWidth : 70, labelAlign : "left", items : [{ layout : "column", items : [{ columnWidth : .5, layout : "form", items : [{ name : "linksNo", xtype : "textfield", fieldLabel : "房间名称", allowBlank : false, width : 220, value : "102室", blankText : '不能为空' }] }, { columnWidth : .5, layout : "form", items : devBoxCombox }] }, { layout : "column", items : [ { columnWidth : .5, layout : "form", items : devWhereCombox },{ columnWidth : .5, layout : "form", items : [{ name : "linksModeld", xtype : "textfield", fieldLabel : "负责岗位", width : 220, value : "资产岗", allowBlank : false, blankText : '不能为空' }] }] },{ layout : "form", items : [{ name : "remarkCode", xtype : "textarea", fieldLabel : "备注", width : 519, height:50, value : "网络组专用机房" }] }], buttonAlign : "center", buttons : [{ text : "提交", handler : function() { Ext.Msg.alert("提示", "增加办公室成功!") } }, { text : "重置", handler : function() { roomForm.getForm().reset(); } }, { text : "关闭", handler : function() { roomWin.hide(); } }] }); var roomWin = new Ext.Window({ title : "增加办公室对话框", width : 650, autoHeight : true, closeAction : "hide", maskDisabled : true, plain : false, bodyStyle : "padding:8px", items : roomForm, modal : true, listeners : { close : function(window) { var delObj = document.getElementById(window.button.id); delObj.parentNode.parentNode.removeChild(delObj.parentNode); } } }) // 定义用于表示订单的数组 var data = [{ roomName : "102室", roomAddr : "#1办公楼", roomDept:"网络组", roomUse:"资产岗", devCount : "45", devUse:"13", remark : "网络组工作办公室" }]; // 定义Proxy var proxy = new Ext.data.MemoryProxy(data); var Order = Ext.data.Record.create([{ name : "roomName", type : "string", mapping : "roomName" }, { name : "roomAddr", type : "string", mapping : "roomAddr" }, { name : "devCount", type : "string", mapping : "devCount" }, { name : "devUse", type : "string", mapping : "devUse" }, { name : "roomDept", type : "string", mapping : "roomDept" }, { name : "roomUse", type : "string", mapping : "roomUse" }, { name : "remark", type : "string", mapping : "remark" }]); // 定义Reader var reader = new Ext.data.JsonReader({}, Order); // 定义Store var store = new Ext.data.Store({ proxy : proxy, reader : reader, autoLoad : true, pruneModifiedRecords : true }); // 定义列模型 var cm = new Ext.grid.ColumnModel([{ header : "房间名称", dataIndex : "roomName", width : 100, align : "center", sortable : true }, { header : "房间位置", dataIndex : "roomAddr", width : 90, align : "center", sortable : true }, { header : "归属部门", dataIndex : "roomDept", width : 90, align : "center", sortable : true }, { header : "负责岗", dataIndex : "roomUse", width : 90, align : "center", sortable : true, editor : new Ext.grid.GridEditor(new Ext.form.TextField()) }, { header : "端口数量", dataIndex : "devCount", width : 90, align : "center", sortable : true }, { header : "在用端口数", dataIndex : "devUse", width : 90, align : "center", sortable : true, editor : new Ext.grid.GridEditor(new Ext.form.TextField()) }, { id : "remark", header : "描述", dataIndex : "remark", width : 150, align : "center", sortable : true, editor : new Ext.grid.GridEditor(new Ext.form.TextField()) } ]); // 分页控件 其实分页还是要后台控制的 var pagingBar = new Ext.PagingToolbar({ autoWidth : true, pageSize : 3, displayInfo : true, emptyMsg : "没有数据显示", displayMsg : "显示从{0}条到{1}条数据,共{2}条数据", store : store, loadMask : true }); var search=new Ext.Form.TextField({ emptyText:"请输入房间名称" }); // 定义EditGridPanel var grid = new Ext.grid.GridPanel({ title : "房间列表视窗", store : store, cm : cm, renderTo : "a", autoExpandColumn : "remark", autoWidth : true, height : 300, autoEncode : true, // 提交时是否自动编码 tbar : ["-", { text : "增加房间", icon : "../../../extjs/resources/images/default/dd/drop-add.gif", handler : function() { roomWin.show(); } }, "-", { text : "修改房间", icon : "../../../extjs/resources/images/default/dd/drop-add.gif", cls : "x-btn-text-icon", handler : function() { roomWin.show(); } }, "-", { text : "删除机房", icon : "../../../extjs/resources/images/default/dd/drop-no.gif", cls : "x-btn-text-icon", handler : function() { var sm = grid.getSelectionModel(); if (sm.hasSelection()) { Ext.Msg.confirm("提示", "真的要删除选中的行吗?", function(btn) { if (btn == "yes") { var rsm = grid.getSelectionModel();// 得到行选择模型 var view = grid.getView(); var store = grid.getStore(); for (var i = view.getRows().length - 1; i >= 0; i--) { if (rsm.isSelected(i)) { store.remove(store.getAt(i)); } } view.refresh(); } }); } else { Ext.Msg.alert("错误", "请先选择删除的行,谢谢!"); } } }, "-","->"search,{ text:查询},"-" ], bbar : pagingBar }); grid.addListener('rowdblclick', cellclick); function cellclick(grid, rowIndex, e) { roomstore.remove(roomstore.getAt(0)); //view.refresh(); // devStore.load({params:{start:0, limit:3}}); } }) 1.search框在ttar如何居中 现在是挨着上面了 下面还有一段距离,我想把文本框居中; 2,我选中某一列点击修改时 怎么样把当前行各列的值传入到增加房间的视窗中;
这段js为什么报错?
提示:for (item in this.validators) { 这句报错不知道为什么 function Field(params) { this.field_id = params.fid; //要验证的字段的ID this.validators = params.val; //验证器对象数组 this.on_suc = params.suc; //当验证成功的时候执行的事件 this.on_error = params.err; //当验证失败的时候执行的事件 this.checked = false; //是否通过验证 } Field.prototype.validate = function() { //循环每一个验证器 alert(this.validators["f1"]); for (item in this.validators) { //给验证器附加验证成功和验证失败的回调事件 this.set_callback(this.validators[item]); //执行验证器上的Validate方法,验证是否符合规则 if (!this.validators[item].validate(this.data())) { break; //一旦任意一个验证器失败就停止 } } } //获取字段值的方法 Field.prototype.data = function() { return document.getElementById(this.field_id).value; } Field.prototype.set_callback = function(val) { var self = this; //换一个名字来存储this,不然函数的闭包中会覆盖这个名字 val.on_suc = function() { //验证成功执行的方法 self.checked = true; //将字段设置为验证成功 self.on_suc(val.tips); //执行验证成功的事件 } val.on_error = function() { //验证失败的时候执行的方法 self.checked = false; //字段设置为验证失败 self.on_error(val.tips);//执行验证失败的事件 } } //长度验证的验证器类 function Len_val(min_l, max_l, tip) { this.min_v = min_l; this.max_v = max_l; this.tips = tip; this.on_suc = null; this.on_error = null; } Len_val.prototype.validate = function(fd) { if (fd.length < this.min_v || fd.length > this.max_v) { this.on_error(); return false; } this.on_suc(); return true; } //正则表达式验证器 function Exp_val(expresion, tip) { this.exps = expresion; this.tips = tip; this.on_suc = null; this.on_error = null; } Exp_val.prototype.validate = function(fd) { if (!fd) { this.on_suc(); return true; } if (this.exps.test(fd)) { this.on_suc(); return true; } else { this.on_error(); return false; } } //远程验证器 function Remote_val(url, tip) { this.p_url = url; this.tips = tip; this.on_suc = null; this.on_error = null; } Remote_val.prototype.validate = function(fd) { var self = this; $.post(this.p_url, { f : fd }, function(data) { if (data.rs) { self.on_suc(); return; } else { self.on_error(); } }, "json"); return false; } //自定义函数验证器 function Man_val(tip, func) { this.tips = tip; this.val_func = func; this.on_suc = null; this.on_error = null; } Man_val.prototype.validate = function(fd) { if (this.val_func(fd)) { this.on_suc(); } else { this.on_error(); } } function UserForm(items) { this.f_item = items; //把字段验证对象数组复制给属性 for (idx = 0; idx < this.f_item.length; idx++) { //循环数组 var fc = this.get_check(this.f_item[idx]); //获取封装后的回调事件 $("#" + this.f_item[idx].field_id).blur(fc); //绑定到控件上 } } //绑定验证事件的处理器,为了避开循环对闭包的影响 UserForm.prototype.get_check = function(v) { return function() { //返回包装了调用validate方法的事件 v.validate(); } } //绑定提交事件到元件 UserForm.prototype.set_submit = function(bid, bind) { var self = this; $("#" + bid).click(function() { if (self.validate()) { bind(); } }); } //验证所有的字段 UserForm.prototype.validate = function() { for (idx in this.f_item) { //循环每一个验证器 this.f_item[idx].validate(); //再检测一遍 if (!this.f_item[idx].checked) { return false; //如果错误就返回失败,阻止提交 } } return true; //一个都没错就返回成功执行提交 } html: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'data.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <script type="text/javascript" src="<%=path%>/jquery/jquery-1.6.2.min.js"> </script> <script type="text/javascript" src="<%=path%>/page/reg/js/validata.js"> </script> <script type="text/javascript"> var form; $(function() { var uf = new UserForm( [ new Field( { fid : "f1", val : [ new Len_val(1, 5, "长度错误"), new Exp_val('v_int', "不是数字") ], suc : function(text) { $('t1').val(''); $('t1').attr('class', 'suc'); }, err : function(text) { ('t1').val(text); $('t1').attr('class', 'error'); } }) ]); uf.set_submit("bt", function(form) { alert("表单已经提交了"); }); }); </script> <style> .suc { background-color: #00ff00; } .error { background-color: #ff0000; } </style> </head> <body> <input type="text" id="f1" name="f1" /> <span id="ddd"></span> <br /> <input type="button" id="bt" value="提交" /> </body> </html>
Ext.Ajax.request做文件上传不执行回调函数?
我在做一个多文件上传,整体用的EXT,所以想用EXT的异步请求完成上传,上传没问题,就是上传完了,不执行回调函数,老自动弹一个下载"uploadFile.action"文件,其实就是一个json,好像是根本没执行回调函数,求各位老鸟解释下,并帮我解决,我不想别人上传完,总提示下载"uploadFile.action"。 页面代码: [code="java"] <form id="uploadForm" action="uploadFile.action"> <table border="0" cellspacing="1" class="fu_list"> <thead> <tr> <td colspan="2"><b>上传附件</b></td> </tr> </thead> <tbody> <tr> <td align="right" width="15%" style="line-height:35px;">添加附件:</td> <td><a href="javascript:void(0);" class="files" id="idFile"></a> <img id="idProcess" style="display:none;" src="../../images/upload/loading.gif" /></td> </tr> <tr id="fileList" style="display: none"> <td colspan="2"><table border="0" cellspacing="0"> <thead> <tr> <td>文件路径</td> <td width="100"></td> </tr> </thead> <tbody id="idFileList" name="idFileList"> </tbody> </table></td> </tr> <tr> <td colspan="2" style="color:gray">温馨提示:最多可同时上传 <b id="idLimit"></b> 个文件,只允许上传 <b id="idExt"></b> 文件。 </td> </tr> <tr id="uploadButton" style="display: none"> <td colspan="2" align="center" id="idMsg"><input type="button" value="开始上传" id="idBtnupload" disabled="disabled" /> &nbsp;&nbsp;&nbsp; <input type="button" value="全部取消" id="idBtndel" disabled="disabled" /> </td> </tr> </tbody> </table> </form> <SCRIPT type="text/javascript"> //以下为附件js代码 var isIE = (document.all) ? true : false; var $ = function (id) { return "string" == typeof id ? document.getElementById(id) : id; }; var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Extend = function(destination, source) { for (var property in source) { destination[property] = source[property]; } } var Bind = function(object, fun) { return function() { return fun.apply(object, arguments); } } var Each = function(list, fun){ for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } }; //提交操作 function doUpload(){ if(Efs.getExt("uploadForm").isValid()){ myMask.show(); Ext.Ajax.request({ //请求地址 url: 'uploadFile.action', //提交参数组 fileUpload: true, form: uploadForm, scope: uploadForm, //成功时回调 success: function(response, options) { //获取响应的json字符串 myMask.hide(); var json = response.responseText; var o= Ext.util.JSON.decode(json); // var s="<s:text name="o.msg"/>"; var s=o.msg; Ext.Msg.alert('<s:text name="msg_title"/>', s); }, failure: function (response,options){ myMask.hide(); var st='<s:text name="'+o.msg+'"/>'; Ext.Msg.alert('<s:text name="msg_title"/>', st); } }); } else Ext.Msg.alert('<s:text name="msg_title"/>', '<s:text name="msg_mustFill"/>'); } //文件上传 var FileUpload = Class.create(); FileUpload.prototype = { //表单对象,文件控件存放空间 initialize: function(form, folder, options) { this.Form = $(form);//表单 this.Folder = $(folder);//文件控件存放空间 this.Files = [];//文件集合 this.SetOptions(options); this.FileName = this.options.FileName; this._FrameName = this.options.FrameName; this.Limit = this.options.Limit; this.Distinct = !!this.options.Distinct; this.ExtIn = this.options.ExtIn; this.ExtOut = this.options.ExtOut; this.onIniFile = this.options.onIniFile; this.onEmpty = this.options.onEmpty; this.onNotExtIn = this.options.onNotExtIn; this.onExtOut = this.options.onExtOut; this.onLimite = this.options.onLimite; this.onSame = this.options.onSame; this.onFail = this.options.onFail; this.onIni = this.options.onIni; if(!this._FrameName){ //为每个实例创建不同的iframe this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000); //ie不能修改iframe的name var oFrame = isIE ? document.createElement("<iframe name=\"" + this._FrameName + "\">") : document.createElement("iframe"); //为ff设置name oFrame.name = this._FrameName; oFrame.style.display = "none"; //在ie文档未加载完用appendChild会报错 document.body.insertBefore(oFrame, document.body.childNodes[0]); } //设置form属性,关键是target要指向iframe this.Form.target = this._FrameName; this.Form.method = "post"; //注意ie的form没有enctype属性,要用encoding this.Form.encoding = "multipart/form-data"; //整理一次 this.Ini(); }, //设置默认属性 SetOptions: function(options) { this.options = {//默认值 FileName: "files",//文件上传控件的name,配合后台使用 FrameName: "",//iframe的name,要自定义iframe的话这里设置name onIniFile: function(){},//整理文件时执行(其中参数是file对象) onEmpty: function(){},//文件空值时执行 Limit: 0,//文件数限制,0为不限制 onLimite: function(){},//超过文件数限制时执行 Distinct: true,//是否不允许相同文件 onSame: function(){},//有相同文件时执行 ExtIn: [],//允许后缀名 onNotExtIn: function(){},//不是允许后缀名时执行 ExtOut: [],//禁止后缀名,当设置了ExtIn则ExtOut无效 onExtOut: function(){},//是禁止后缀名时执行 onFail: function(){},//文件不通过检测时执行(其中参数是file对象) onIni: function(){}//重置时执行 }; Extend(this.options, options || {}); }, //整理空间 Ini: function() { //整理文件集合 this.Files = []; //整理文件空间,把有值的file放入文件集合 Each(this.Folder.getElementsByTagName("input"), Bind(this, function(o){ if(o.type == "file"){ o.value && this.Files.push(o); this.onIniFile(o); } })) //插入一个新的file var file = document.createElement("input"); file.name = this.FileName; file.type = "file"; file.onchange = Bind(this, function(){ this.Check(file); this.Ini(); }); this.Folder.appendChild(file); //执行附加程序 this.onIni(); //添加附件成功,显示列表 if(this.Files.length>0){ document.getElementById('fileList').style.display=""; document.getElementById('uploadButton').style.display=""; } }, //检测file对象 Check: function(file) { //检测变量 var bCheck = true; //空值、文件数限制、后缀名、相同文件检测 if(!file.value){ bCheck = false; this.onEmpty(); } else if(this.Limit && this.Files.length >= this.Limit){ bCheck = false; this.onLimite(); } else if(!!this.ExtIn.length && !RegExp("\.(" + this.ExtIn.join("|") + ")$", "i").test(file.value)){ //检测是否允许后缀名 bCheck = false; this.onNotExtIn(); } else if(!!this.ExtOut.length && RegExp("\.(" + this.ExtOut.join("|") + ")$", "i").test(file.value)) { //检测是否禁止后缀名 bCheck = false; this.onExtOut(); } else if(!!this.Distinct) { Each(this.Files, function(o){ if(o.value == file.value){ bCheck = false; } }) if(!bCheck){ this.onSame(); } } //没有通过检测 !bCheck && this.onFail(file); }, //删除指定file Delete: function(file) { //移除指定file this.Folder.removeChild(file); this.Ini(); if(this.Folder.getElementsByTagName("input").length==1){//没有附件时隐藏 document.getElementById('fileList').style.display="none"; document.getElementById('uploadButton').style.display="none"; } }, //删除全部file Clear: function() { //清空文件空间 Each(this.Files, Bind(this, function(o){ this.Folder.removeChild(o); })); this.Ini(); document.getElementById('fileList').style.display="none";//清空同样隐藏 document.getElementById('uploadButton').style.display="none"; } } var fu = new FileUpload("uploadForm", "idFile", { Limit: 3, ExtIn: [], onIniFile: function(file){ file.value ? file.style.display = "none" : this.Folder.removeChild(file); }, onEmpty: function(){ alert("请选择一个文件"); }, onLimite: function(){ alert("超过上传限制"); }, onSame: function(){ alert("已经有相同文件"); }, // ExtIn: ["jpg", "gif"] 可以限制上传文件后缀名,不写即为所有 // onNotExtIn: function(){ alert("只允许上传" + this.ExtIn.join(",") + "文件"); }, onFail: function(file){ this.Folder.removeChild(file); }, onIni: function(){ //显示文件列表 var arrRows = []; if(this.Files.length){ var oThis = this; Each(this.Files, function(o){ var a = document.createElement("a"); a.innerHTML = "取消"; a.href = "javascript:void(0);"; a.onclick = function(){ oThis.Delete(o); return false; }; arrRows.push([o.value, a]); }); } else { arrRows.push(["<font color='gray'>没有添加文件</font>", "&nbsp;"]); } AddList(arrRows); //设置按钮 //$("idBtnupload").disabled = $("idBtndel").disabled = this.Files.length <= 0; } }); $("idBtnupload").onclick = function(){ //显示文件列表 var arrRows = []; Each(fu.Files, function(o){ arrRows.push([o.value, "&nbsp;"]); }); AddList(arrRows); fu.Folder.style.display = "none"; $("idProcess").style.display = ""; $("idMsg").innerHTML = "正在添加文件到您的网盘中,请稍候……<br />有可能因为网络问题,出现程序长时间无响应,请点击“<a href='?'><font color='red'>取消</font></a>”重新上传文件"; doUpload(); $("idProcess").style.display = "none"; //fu.Form.submit(); } //用来添加文件列表的函数 function AddList(rows){ //根据数组来添加列表 var FileList = $("idFileList"), oFragment = document.createDocumentFragment(); //用文档碎片保存列表 Each(rows, function(cells){ var row = document.createElement("tr"); Each(cells, function(o){ var cell = document.createElement("td"); if(typeof o == "string"){ cell.innerHTML = o; }else{ cell.appendChild(o); } row.appendChild(cell); }); oFragment.appendChild(row); }) //ie的table不支持innerHTML所以这样清空table while(FileList.hasChildNodes()){ FileList.removeChild(FileList.firstChild); } FileList.appendChild(oFragment); } $("idLimit").innerHTML = fu.Limit; $("idExt").innerHTML = fu.ExtIn.join(","); $("idBtndel").onclick = function(){ fu.Clear(); } //在后台通过window.parent来访问主页面的函数 //function Finish(msg){ alert(msg); location.href = location.href; } <SCRIPT> [/code] struts配置文件(用的插件自动生成json): [code="java"] <action name="*File" method="{1}" class="com.web.action.UploadFile"> <result type="json" name="success"> <param name="includeProperties">msg</param> <param name="excludeNullProperties">true</param> </result> <result type="json" name="error"> <param name="includeProperties">msg</param> <param name="excludeNullProperties">true</param> </result> </action> [/code] 后台UploadFile.java的代码 [code="java"] package com.web.action; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.ServletActionContext; import com.common.pojo.AppUser; import com.opensymphony.xwork2.ActionContext; /** * 负责文件的上传 */ public class UploadFile { private File[] files; private String[] filesFileName; private Map<String, String> filesPath;// 文件名及其上传后路径 private String msg; public String upload() { /* * Map session=ActionContext.getContext().getSession(); AppUser * user=(AppUser) session.get("user"); if(user==null){ return "error"; } */ msg="上传成功!"; for (int i = 0; i < files.length; i++) { fileCopy(files[i], filesFileName[i]); } return "success"; } private void fileCopy(File file, String fileName) { BufferedInputStream bis = null; BufferedOutputStream bos = null; String realPath = ServletActionContext. getServletContext().getRealPath("/upload/" + fileName); System.out.println(realPath); try { bis = new BufferedInputStream(new FileInputStream(file)); bos = new BufferedOutputStream(new FileOutputStream(new File( realPath))); byte[] buffer = new byte[1024 * 8]; int i = -1; while ((i = bis.read(buffer)) != -1) { bos.write(buffer,0,i); } bos.flush(); } catch (Exception e) { System.out.println("上传异常!"); msg="上传出错!"; e.printStackTrace(); }finally{ try { if (bis != null) bis.close(); if (bos != null) bos.close(); } catch (IOException e1) { System.out.println("上传结束异常!"); e1.printStackTrace(); } } } public File[] getFiles() { return files; } public void setFiles(File[] files) { this.files = files; } public String[] getFilesFileName() { return filesFileName; } public void setFilesFileName(String[] filesFileName) { this.filesFileName = filesFileName; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } } [/code]
在中国程序员是青春饭吗?
今年,我也32了 ,为了不给大家误导,咨询了猎头、圈内好友,以及年过35岁的几位老程序员……舍了老脸去揭人家伤疤……希望能给大家以帮助,记得帮我点赞哦。 目录: 你以为的人生 一次又一次的伤害 猎头界的真相 如何应对互联网行业的「中年危机」 一、你以为的人生 刚入行时,拿着傲人的工资,想着好好干,以为我们的人生是这样的: 等真到了那一天,你会发现,你的人生很可能是这样的: ...
【JSON解析】浅谈JSONObject的使用
简介 在程序开发过程中,在参数传递,函数返回值等方面,越来越多的使用JSON。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,同时也易于机器解析和生成、易于理解、阅读和撰写,而且Json采用完全独立于语言的文本格式,这使得Json成为理想的数据交换语言。 JSON建构于两种结构: “名称/值”对的集合(A Collection of name/va...
《MySQL 性能优化》之理解 MySQL 体系结构
本文介绍 MySQL 的体系结构,包括物理结构、逻辑结构以及插件式存储引擎。
程序员请照顾好自己,周末病魔差点一套带走我。
程序员在一个周末的时间,得了重病,差点当场去世,还好及时挽救回来了。
一名大专同学的四个问题
【前言】   收到一封来信,赶上各种事情拖了几日,利用今天要放下工作的时机,做个回复。   2020年到了,就以这一封信,作为开年标志吧。 【正文】   您好,我是一名现在有很多困惑的大二学生。有一些问题想要向您请教。   先说一下我的基本情况,高考失利,不想复读,来到广州一所大专读计算机应用技术专业。学校是偏艺术类的,计算机专业没有实验室更不用说工作室了。而且学校的学风也不好。但我很想在计算机领...
复习一周,京东+百度一面,不小心都拿了Offer
京东和百度一面都问了啥,面试官百般刁难,可惜我全会。
Java 14 都快来了,为什么还有这么多人固守Java 8?
从Java 9开始,Java版本的发布就让人眼花缭乱了。每隔6个月,都会冒出一个新版本出来,Java 10 , Java 11, Java 12, Java 13, 到2020年3月份,...
达摩院十大科技趋势发布:2020 非同小可!
【CSDN编者按】1月2日,阿里巴巴发布《达摩院2020十大科技趋势》,十大科技趋势分别是:人工智能从感知智能向认知智能演进;计算存储一体化突破AI算力瓶颈;工业互联网的超融合;机器间大规模协作成为可能;模块化降低芯片设计门槛;规模化生产级区块链应用将走入大众;量子计算进入攻坚期;新材料推动半导体器件革新;保护数据隐私的AI技术将加速落地;云成为IT技术创新的中心 。 新的画卷,正在徐徐展开。...
轻松搭建基于 SpringBoot + Vue 的 Web 商城应用
首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。Fun: Fun 是一个用于支持 Serverless 应用部署的工具,能帮助您便捷地管理函数计算、API ...
讲真,这两个IDE插件,可以让你写出质量杠杠的代码
周末躺在床上看《拯救大兵瑞恩》 周末在闲逛的时候,发现了两个优秀的 IDE 插件,据说可以提高代码的质量,我就安装了一下,试了试以后发现,确实很不错,就推荐给大家。 01、Alibaba Java 代码规范插件 《阿里巴巴 Java 开发手册》,相信大家都不会感到陌生,其 IDEA 插件的下载次数据说达到了 80 万次,我今天又贡献了一次。嘿嘿。 该项目的插件地址: https://github....
Python+OpenCV实时图像处理
目录 1、导入库文件 2、设计GUI 3、调用摄像头 4、实时图像处理 4.1、阈值二值化 4.2、边缘检测 4.3、轮廓检测 4.4、高斯滤波 4.5、色彩转换 4.6、调节对比度 5、退出系统 初学OpenCV图像处理的小伙伴肯定对什么高斯函数、滤波处理、阈值二值化等特性非常头疼,这里给各位分享一个小项目,可通过摄像头实时动态查看各类图像处理的特点,也可对各位调参、测试...
2020年一线城市程序员工资大调查
人才需求 一线城市共发布岗位38115个,招聘120827人。 其中 beijing 22805 guangzhou 25081 shanghai 39614 shenzhen 33327 工资分布 2020年中国一线城市程序员的平均工资为16285元,工资中位数为14583元,其中95%的人的工资位于5000到20000元之间。 和往年数据比较: yea...
为什么猝死的都是程序员,基本上不见产品经理猝死呢?
相信大家时不时听到程序员猝死的消息,但是基本上听不到产品经理猝死的消息,这是为什么呢? 我们先百度搜一下:程序员猝死,出现将近700多万条搜索结果: 搜索一下:产品经理猝死,只有400万条的搜索结果,从搜索结果数量上来看,程序员猝死的搜索结果就比产品经理猝死的搜索结果高了一倍,而且从下图可以看到,首页里面的五条搜索结果,其实只有两条才是符合条件。 所以程序员猝死的概率真的比产品经理大,并不是错...
害怕面试被问HashMap?这一篇就搞定了!
声明:本文以jdk1.8为主! 搞定HashMap 作为一个Java从业者,面试的时候肯定会被问到过HashMap,因为对于HashMap来说,可以说是Java集合中的精髓了,如果你觉得自己对它掌握的还不够好,我想今天这篇文章会非常适合你,至少,看了今天这篇文章,以后不怕面试被问HashMap了 其实在我学习HashMap的过程中,我个人觉得HashMap还是挺复杂的,如果真的想把它搞得明明白...
毕业5年,我问遍了身边的大佬,总结了他们的学习方法
我问了身边10个大佬,总结了他们的学习方法,原来成功都是有迹可循的。
python爬取百部电影数据,我分析出了一个残酷的真相
2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据,数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27亿,同比增长0.64%。 看上去似乎是一片大好对不对?不过作为一名严谨求实的数据分析师,我从官方数据中看出了一点端倪:国产票房增幅都已经高达8.65%了,为什...
推荐10个堪称神器的学习网站
每天都会收到很多读者的私信,问我:“二哥,有什么推荐的学习网站吗?最近很浮躁,手头的一些网站都看烦了,想看看二哥这里有什么新鲜货。” 今天一早做了个恶梦,梦到被老板辞退了。虽然说在我们公司,只有我辞退老板的份,没有老板辞退我这一说,但是还是被吓得 4 点多都起来了。(主要是因为我掌握着公司所有的核心源码,哈哈哈) 既然 4 点多起来,就得好好利用起来。于是我就挑选了 10 个堪称神器的学习网站,推...
这些软件太强了,Windows必装!尤其程序员!
Windows可谓是大多数人的生产力工具,集娱乐办公于一体,虽然在程序员这个群体中都说苹果是信仰,但是大部分不都是从Windows过来的,而且现在依然有很多的程序员用Windows。 所以,今天我就把我私藏的Windows必装的软件分享给大家,如果有一个你没有用过甚至没有听过,那你就赚了????,这可都是提升你幸福感的高效率生产力工具哦! 走起!???? NO、1 ScreenToGif 屏幕,摄像头和白板...
阿里面试,面试官没想到一个ArrayList,我都能跟他扯半小时
我是真的没想到,面试官会这样问我ArrayList。
曾经优秀的人,怎么就突然不优秀了。
职场上有很多辛酸事,很多合伙人出局的故事,很多技术骨干被裁员的故事。说来模板都类似,曾经是名校毕业,曾经是优秀员工,曾经被领导表扬,曾经业绩突出,然而突然有一天,因为种种原因,被裁员了,...
大学四年因为知道了这32个网站,我成了别人眼中的大神!
依稀记得,毕业那天,我们导员发给我毕业证的时候对我说“你可是咱们系的风云人物啊”,哎呀,别提当时多开心啦????,嗯,我们导员是所有导员中最帅的一个,真的???? 不过,导员说的是实话,很多人都叫我大神的,为啥,因为我知道这32个网站啊,你说强不强????,这次是绝对的干货,看好啦,走起来! PS:每个网站都是学计算机混互联网必须知道的,真的牛杯,我就不过多介绍了,大家自行探索,觉得没用的,尽管留言吐槽吧???? 社...
良心推荐,我珍藏的一些Chrome插件
上次搬家的时候,发了一个朋友圈,附带的照片中不小心暴露了自己的 Chrome 浏览器插件之多,于是就有小伙伴评论说分享一下我觉得还不错的浏览器插件。 我下面就把我日常工作和学习中经常用到的一些 Chrome 浏览器插件分享给大家,随便一个都能提高你的“生活品质”和工作效率。 Markdown Here Markdown Here 可以让你更愉快的写邮件,由于支持 Markdown 直接转电子邮...
看完这篇HTTP,跟面试官扯皮就没问题了
我是一名程序员,我的主要编程语言是 Java,我更是一名 Web 开发人员,所以我必须要了解 HTTP,所以本篇文章就来带你从 HTTP 入门到进阶,看完让你有一种恍然大悟、醍醐灌顶的感觉。 最初在有网络之前,我们的电脑都是单机的,单机系统是孤立的,我还记得 05 年前那会儿家里有个电脑,想打电脑游戏还得两个人在一个电脑上玩儿,及其不方便。我就想为什么家里人不让上网,我的同学 xxx 家里有网,每...
史上最全的IDEA快捷键总结
现在Idea成了主流开发工具,这篇博客对其使用的快捷键做了总结,希望对大家的开发工作有所帮助。
阿里程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
谁是华为扫地僧?
是的,华为也有扫地僧!2020年2月11-12日,“养在深闺人不知”的华为2012实验室扫地僧们,将在华为开发者大会2020(Cloud)上,和大家见面。到时,你可以和扫地僧们,吃一个洋...
AI 没让人类失业,搞 AI 的人先失业了
最近和几个 AI 领域的大佬闲聊 根据他们讲的消息和段子 改编出下面这个故事 如有雷同 都是巧合 1. 老王创业失败,被限制高消费 “这里写我跑路的消息实在太夸张了。” 王葱葱哼笑一下,把消息分享给群里。 阿杰也看了消息,笑了笑。在座几位也都笑了。 王葱葱是个有名的人物,21岁那年以全额奖学金进入 KMU 攻读人工智能博士,累计发表论文 40 余篇,个人技术博客更是成为深度学习领域内风向标。 ...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
作为一名大学生,如何在B站上快乐的学习?
B站是个宝,谁用谁知道???? 作为一名大学生,你必须掌握的一项能力就是自学能力,很多看起来很牛X的人,你可以了解下,人家私底下一定是花大量的时间自学的,你可能会说,我也想学习啊,可是嘞,该学习啥嘞,不怕告诉你,互联网时代,最不缺的就是学习资源,最宝贵的是啥? 你可能会说是时间,不,不是时间,而是你的注意力,懂了吧! 那么,你说学习资源多,我咋不知道,那今天我就告诉你一个你必须知道的学习的地方,人称...
立即提问