为何在文本框不能输入,但将焦点移到别的文本框中然后以后去,则可以输入,readpnly=false enabled=true

zhuchuanan 2003-10-17 09:49:56
为何在文本框不能输入,但将焦点移到别的文本框中然后以后去,则可以输入,readpnly=false enabled=true,你们遇过吗。
...全文
76 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
oracs 2003-10-17
  • 打赏
  • 举报
回复
不能输入只能是ReadOnly = True or Enabled = False造成的,检查一下程序,单步调试一下.
chenxuwang 2003-10-17
  • 打赏
  • 举报
回复
我碰到这样的问题,那是因为在事件里进行了交替调用。
henry2003 2003-10-17
  • 打赏
  • 举报
回复
沒遇見過!
vavyboyleon 2003-10-17
  • 打赏
  • 举报
回复
是不是 OnKeyPress事件里 写什么setfocus了?
代码?睇下先
Maple119 2003-10-17
  • 打赏
  • 举报
回复
没有遇到过这个问题,是不是 OnKeyPress事件写了代码屏蔽键盘输入了.,
IORILI 2003-10-17
  • 打赏
  • 举报
回复
赫赫,删掉这个edit,重新加一个
herofy 2003-10-17
  • 打赏
  • 举报
回复
O
hiflower 2003-10-17
  • 打赏
  • 举报
回复
系统有问题
Dim filem As String '保存文件名 Dim str As String Dim msg Dim bu As Boolean '用于判断文本框的内容是否改变 Public Nexts As Double '用于存储查找末字符的位置 Public Sv, mo As Double 'sv用于存储查的下一个字符的位置,mo用于存储查找第一次查找字符的位置 Dim Cmt(3) As Single, Cml(3) As Single, Cmw(3) As Single, Cmh(3) As Single Dim Tt(1) As Single, Tl(1) As Single, Tw(1) As Single, Th(1) As Single Dim cht As Single, chl As Single, chw As Single, chh As Single Private Sub Check1_Click() If Check1.Value = 1 Then Label1.Caption = "要连接的末字符" Else Label1.Caption = "要查找的首字符" End If End Sub Private Sub Command1_Click() Dim Ts As String Dim a As Long a = 1048576 cmo1.Filter = "*.txt" cmo1.ShowOpen filem = cmo1.FileName If cmo1.FileName = "" Then Exit Sub End If Ts = Right(cmo1.FileName, 4) If Ts <> ".txt" Then MsgBox "您打开的非文本文档文件", , "提示" Exit Sub End If If FileLen(filem) \ a > 10 Then MsgBox "您打开的文件已超过10M", , "提示" Exit Sub End If RichTextBox1.FileName = cmo1.FileName bu = False Label3.Caption = "你打开的文件名为:" & filem If FileLen(filem) \ 1024 <= 0 Then '判断文件是否有1KB Label4.Caption = FileLen(filem) & "字节" ElseIf FileLen(filem) \ 1024 >= 1 And FileLen(filem) / 1024 <= 1024 Then '文件有1KB和文件小于1M时。 Label4.Caption = "文件大小为" & Left(FileLen(filem) / 1024, 5) & "KB" ElseIf FileLen(filem) \ a > 0 Then '文件有1M时 Label4.Caption = "文件大小为:" & Left(FileLen(filem) / a, 4) & "M" End If Exit Sub End Sub Private Sub Command2_Click() If Label1.Caption = "要查找的首字符" Then If Text1.Text = "" Then MsgBox "请输入要查找的内容" Exit Sub End If Timer3.Enabled = True Command1.Enabled = False Command2.Enabled = False '防止在程序忙时,用户点击其它按扭,导致程序崩溃。 Command3.Enabled = False Label2.Visible = True mo = InStr(RichTextBox1.Text, Text1.Text) Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Timer3.Enabled = False Label2.Visible = False Sv = mo RichTextBox1.SetFocus DoEvents RichTextBox1.SelStart = mo - 1 RichTextBox1.SelLength = Len(Text1.Text) Label1.Caption = "要查找的末字符" Text1.Text = "" '查找首字符 ElseIf Label1.Caption = "要查找的末字符" Then If Text1.Text = "" Then MsgBox "请输入要查找的内容" Exit Sub End If Timer3.Enabled = True Command1.Enabled = False Command2.Enabled = False Command3.Enabled = False Label2.Visible = True Nexts = InStr(Sv + Len(Text1.Text), RichTextBox1.Text, Text1.Text) 'sv后面加上文本长度是为了从字符后面位置开始查找,否则只会从已查找到字符位置前查找。这样会重复 Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Timer3.Enabled = False Label2.Visible = False If Nexts = 0 Then MsgBox "未查找到内容", , "提示" Exit Sub End If Sv = Nexts RichTextBox1.SetFocus RichTextBox1.SelStart = Nexts - 1 RichTextBox1.SelLength = Len(Text1.Text) Command2.Caption = "查找下一个" Command2.Enabled = False Timer1.Enabled = True '查找末字符,并把选的代码交给时间控件 ElseIf Label1.Caption = "要连接的末字符" Then Timer3.Enabled = True Command1.Enabled = False Command2.Enabled = False Command3.Enabled = False Label2.Visible = True mo = InStr(Sv + Len(Text1.Text), RichTextBox1.Text, Text1.Text) Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Timer3.Enabled = False Label2.Visible = False If mo = 0 Then MsgBox "找不到" Exit Sub End If Sv = mo DoEvents RichTextBox1.SetFocus RichTextBox1.SelStart = mo - 1 RichTextBox1.SelLength = Len(Text1.Text) Command2.Caption = " 查找下一个" Command2.Enabled = False Timer2.Enabled = True '选文本代码交给时间控件2完成 End If End Sub Private Sub Command3_Click() Call save MsgBox "保存成功" End Sub Private Sub Command4_Click() msg = MsgBox("是否删除选的字符", vbYesNo + 64, "询问") If msg = vbYes Then str = Replace(RichTextBox1.Text, RichTextBox1.SelText, "") RichTextBox1.SelText = str End If End Sub Sub save() Open filem For Output As #1 Print #1, RichTextBox1.Text Close #1 End Sub Private Sub Form_Load() menpaste.Enabled = False Tt(0) = Text1.Top Tl(0) = Text1.Left Tw(0) = Text1.Width Th(0) = Text1.Height Tt(1) = RichTextBox1.Top Tl(1) = RichTextBox1.Left Tw(1) = RichTextBox1.Width Th(1) = RichTextBox1.Height '保存Combo1控件的Top、Left、Width和Height属性 Cmt(0) = Command1.Top Cml(0) = Command1.Left Cmw(0) = Command1.Width Cmh(0) = Command1.Height End Sub Private Sub Form_Unload(Cancel As Integer) If filem <> "" And bu = True Then msg = MsgBox("是否保存文件", vbYesNo + 64, "询问") If msg = vbYes Then Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Timer3.Enabled = False Label2.Visible = False Call save Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Timer3.Enabled = False Label2.Visible = False MsgBox "保存成功" End If End If End Sub Private Sub mencopy_Click() Clipboard.SetText RichTextBox1.SelText menpaste.Enabled = True End Sub Private Sub menexit_Click() End Sub Private Sub menpaste_Click() RichTextBox1.SelText = Clipboard.GetText End Sub Private Sub RichTextBox1_Change() bu = True If bu = True And filem <> "" Then Command3.Enabled = True End If End Sub Private Sub RichTextBox1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If Button = vbRightButton Then PopupMenu menfile End If End Sub Private Sub Timer1_Timer() Static a As Integer a = a + 1 If a = 3 Then Command2.Enabled = True Timer1.Enabled = False '到时间后停止时间控件,以防多次运行 a = 0 msg = MsgBox("是否要将首末字符全部选", vbYesNo + 64, "询问") '选所查找的下一个字符 If msg = vbYes Then Timer3.Enabled = True Command1.Enabled = False Command2.Enabled = False Command3.Enabled = False Label2.Visible = True RichTextBox1.SetFocus RichTextBox1.SelStart = mo - 1 RichTextBox1.SelLength = Nexts Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Timer3.Enabled = False Label2.Visible = False Label1.Caption = "要查找的首字符" Command4.Enabled = True Command2.Caption = "开始查找" End If End If End Sub Private Sub Timer2_Timer() Static b As Integer b = b + 1 If b = 3 Then Timer2.Enabled = False Command2.Enabled = True b = 0 msg = MsgBox("是否从第一个文字到些内容位置全选", vbYesNo + 64, "询问") If msg = vbYes Then Timer3.Enabled = True Command1.Enabled = False Command2.Enabled = False Command3.Enabled = False Label2.Visible = True RichTextBox1.SetFocus RichTextBox1.SelStart = 1 RichTextBox1.SelLength = mo Command1.Enabled = True Command2.Enabled = True Command3.Enabled = True Timer3.Enabled = False Label2.Visible = False Command4.Enabled = True End If End If End Sub Private Sub Timer3_Timer() Static s As Integer s = s + 1 prog1.Value = s If s Mod 2 = 0 Then DoEvents End If End Sub
VB程序设计综合复习题 1、叙述Visual Basic的特点。 2、当窗体上有三个文本框和一个命令按钮,若程序运行时,焦点定位在第三个文本框(Text3)处,应对何控件的什么属性进行何种设置? 3、若要对窗体上的三个文本框输入数据,个控件焦点的移动可通过Tab键(系统本身具有的),也可通过回车键,则要对文本框的什么事件编程? 4、当某文本框输入数据后(按了回车键),进行判断认为数据输入错,怎样删除原来数据?怎样使焦点回到文本框重新输入? 5、怎样把关于Command命令按钮的Enabled属性的帮助示例代码复制到你的代码窗口?已知帮助的代码如下: Private Sub Form_Load() Text1.Text = ”” ‘消除文本框的内容 Command1.Caption = “Save” ‘在按钮上放置标题 End Sub Private Sub Text1_Change() If Text1.Text = “” Then ‘查看文本框是否为空 Command1.Enabled = False ‘使按钮无效 Else Command1.Enabled = True ‘使按钮有效 End If End Sub 6、当运行程序前,对某些控件设置属性值,除了在窗体直接设置外,还可以通过代码设置,这些代码一般放在什么事件?例如,程序要将命令按钮定位在窗体的央,请写出事件过程。 7、在KeyPress事件,如何取消用户刚键入的字符? 8、静态数组与动态数组的区别是什么?在声明静态数组、重定义动态数组时的下标都可以用变量来表示吗? 9、函数过程和子过程的区别是什么? 10、子过程调用有哪两种形式? 11、什么是形参?什么是实参?什么是值引用?什么地址引用?地址引用时,对应的实参有没有限制? 12、如果要时钟控件每半分钟发生一个Timer事件,则Interval属性应设置为多少? 13、如果在KeyDown事件过程将KeyCode设置为0,KeyPress的KeyAscii参数会不会受影响?如果输入的对象是文本框,那文本框的内容是否有影响? 14、构造满足下列条件的Open语句。 (1)建立一个新的顺序文件SEQNEW.DAT,供用户写入数据,指定文件号为1。 (2)打开一个老的顺序文件SEQOLD.DAT,用户将从该文件读出数据,指定文件号为2。 (3)打开一个老的顺序文件SEQAPPEND.DAT,用户将在该文件后面添加数据,文件号通过调用FreeFile函数获得。 15、请写出程序代码片段,将磁盘上的两个文件合并。(提示:把它们作为二进制文件打开) 16、PictureBox控件和Image控件有什么区别? 17、Visual Basic可处理哪些格式的图形文件? 18、在程序运行时怎样在图形(像)框装入或删除图形? 19、简述Printer对象与Printers集合对象的区别。 20、当要在ToolBar控件添加一个按钮,如何实现? 21、当要修改ToolBar控件某按钮的图像,如何实现? 22、Visual Basic记录集有几种类型?有
实现功能:模拟微软计算器界面,实现四则混合运算1.键盘输入(KeyUp事件)2.无焦点(按钮失去焦点)3.实现优先级运算。比如直接输入1-2*3=-5,而不是微软计算器的-34.使用操作工厂,使用接口5.实现菜单里的复制粘贴功能6.可视化文本框7.实现间操作结果显示8.正则表达式验证输入是否为数字9.小数点个数校验10.使用发消息_Flag实现操作符状态的判定及转换部分注释预览:失去焦点: private void text_display_GotFocus(object sender, EventArgs e) { /* * 文本框的“获取焦点”事件发生时执行的方法。每次获得焦点时,就会执行此方法,使之马上失去焦点。 * * 当某控件的Enable属性变为False的时候,它的焦点将转移到TabIndex属性值比它大1的控件上。 * 这时,如果有多个控件的TabIndex属性值同时比它大1,鼠标点击按钮或敲击键盘时候会发出“咚”的一声。 * 故在本程序,将label_m控件的TabIndex设为1,其它的全部设为0,因此所有的控件在不可用时焦点都会转移到label_m上, * 因为label_m没有Click和KeyUp事件,所以不会出错。 * 这样就实现了全局无焦点的功能。 * */ text_display.Enabled = false; //先使文本框不可用,这时焦点移到TabIndex比文本框大的下一个控件上 text_display.Enabled = true; //再使文本框可用,这时焦点不会返回。 }KeyUp事件: else if (e.KeyCode == Keys.NumPad1 || e.KeyCode == Keys.D1) { /* 当窗体的某个控件触发了其本身的KeyUp事件之后, * 将会调用keyUp()方法,并判断是哪个按键 * 如果是大键盘或者是小键盘的1时,便调用num_Click()方法。 * 参数是no_1和e。 * 在这里的no_1指的是按钮no_1,e是KeyUp事件 * no_1是按钮,参数格式正确;而e是KeyUp事件,也是事件的一种。KeyEventHandler当然也是EventHandler的一部分。 * 所以调用了之num_Click()后一切按照no_1按钮事件的操作执行 * 所以no_1按钮的这一句 * this.no_1.KeyUp += new System.Windows.Forms.KeyEventHandler(this.num_Click); * 可以不写 */ num_Click(no_1, e); }小数点点击的校验: private void dot_Click(object sender, EventArgs e) { if (!dotFlag) //没点击的情况下 { if (operFlag) //如果点击了运算符,就将文本换为"0.",并将小数点设为已点击 { text_display.Text = "0."; dotFlag = true; } else if (text_display.Text.Equals("0.")) //如果没有点击运算符,切当前文本是"0.",便保持现状但将小数点设为已点击 { dotFlag = true; } else if (text_display.Text.Equals("0") || text_display.Text.Equals("")) { text_display.Text = "0."; dotFlag = true; } else //其他情况直接添加并将小数点设为已点击 { text_display.Text = text_display.Text + "."; dotFlag = true; } } else //如果已点击则什么也不做 { } enterFlag = false; label_m.Focus(); //键盘按键之后焦点由下面的各个_GotFocus()方法控制;鼠标点击之后的焦点有这条语句控制,同样使焦点移到label_m上。 }
rivate Sub cmdAdd_Click() Dim str1 As String Dim cnn As New ADODB.Connection '数据库连接 If cmdAdd.Caption = "新增" Then '按钮为“新增”状态 cmdAdd.Caption = "保存" '修改按钮标题为“保存”,提示用户保存数据 cmdCancel.Visible = True '显示“取消”按钮 lstbus.Enabled = False '禁止用户操作列表框 LockControl (False) '允许用户操作窗口部分控件 txtbus.Text = "" '清除“线路名”文本框 txtBeginEnd.Text = "" '清除“运行区间”文本框 cmbTickType.Text = "无人售票" '设置售票类型的默认值 cmbPrice.Text = "上车一元" '设置票价的默认值 optIC2.Value = True '设置不支持IC卡 txtRuntime.Text = "" '清除“运行时间”文本框 txtCompany.Text = "" '清除“公交公司”文本框 txtMemo.Text = "" '清除“备注”文本框 Else If Not CheckInput Then Exit Sub '调用CheckInput函数检查输入数据 cmdAdd.Caption = "新增" '修改按钮标题为“新增” cmdCancel.Visible = False '隐藏“取消按钮" lstbus.Enabled = True '允许用户操作列表框 LockControl (True) '锁定窗口部分控件 '定义新增数据的SQL语句 str1 = "INSERT INTO [BUS]([bus],[beginend],[ticktype],[price]" str1 = str1 + ",[ic],[runtime],[company],[memo]) VALUES(" 'INSERT INTO语句 str1 = str1 + "'" + txtbus.Text + "','" '线路名 str1 = str1 + txtBeginEnd.Text + "','" '运行区间 str1 = str1 + cmbTickType.Text + "','" '售票类型 str1 = str1 + cmbPrice.Text + "'," '票价 If optIC1.Value Then '是否支持IC卡 str1 = str1 + "true,'" '支持 Else str1 = str1 + "false,'" '不支持 End If str1 = str1 + txtRuntime.Text + "','" '运行时间 str1 = str1 + txtCompany.Text + "','" '公交公司 str1 = str1 + txtMemo.Text + "')" '备注 cnn.ConnectionString = Conn '设置数据库连接字符串 cnn.Open '打开数据库连接 cnn.Execute (str1) '执行INSERT INTO语句插入数据 cnn.Close '关闭数据库连接 Form_Load '调用窗体装载事件代码,重新将线路信息显示在列表框 End If End Sub Private Sub cmdCancel_Click() '“取消”按钮放弃输入的值 lstbus.Enabled = True '允许用户操作列表框 cmdCancel.Visible = False '隐藏“取消”按钮,使其不可见 cmdAdd.Caption = "新增" '修改“保存”按钮标题为“新增” LockControl (True) '锁定窗口部分控件 lstbus_Click '调用列表框的单击事件代码 End Sub Private Sub cmdExit_Click() '退出当前窗体 Dim ret As Integer If cmdAdd.Caption = "保存" Then '判断是否有输入的信息未保存 ret = MsgBox("新增数据还未保存,是否退出?", vbQuestion + vbYesNo) '获取用户的选择 If ret = vbNo Then '选择“否” Exit Sub '退出当前过程,则不退出当前窗体 End If End If Unload Me '退出当前窗体 End Sub Private Sub Form_Load() '窗体初始化代码 Dim cnn As New ADODB.Connection '定义数据库连接变量 Dim rst As New ADODB.Recordset '定义记录集变量 LockControl (True) '锁定窗口部分控件 cnn.ConnectionString = Conn '设置数据库连接字符串 cnn.Open '打开数据库连接 Set rst.ActiveConnection = cnn '设置记录集的数据库连接 rst.Open "SELECT [bus] FROM [bus]" '打开记录集,得到线路名数据 lstbus.Clear '清除列表框原有内容 Do While Not rst.EOF '循环处理记录集的数据 lstbus.AddItem rst(0).Value '将线路名添加到列表框 rst.MoveNext '处理下一记录 Loop If lstbus.ListCount > 0 Then '列表框有数据 lstbus.ListIndex = 0 '选第1个数据 End If rst.Close '关闭记录集 cnn.Close '关闭数据库连接 End Sub Private Sub Label2_Click() End Sub Private Sub Label8_Click() End Sub Private Sub lstbus_Click() '单击列表框时,更新右侧的显示数据 Dim cnn As New ADODB.Connection '定义数据库连接 Dim rst As New ADODB.Recordset '定义记录集 Dim str1 As String, str2 As String '临时字符串变量 str1 = lstbus.List(lstbus.ListIndex) '获取列表框的选项(可介绍一下列表框) cnn.ConnectionString = Conn '设置数据库连接字符串 cnn.Open '打开数据库连接 Set rst.ActiveConnection = cnn '设置记录集的数据库连接 str2 = "SELECT * FROM [BUS] WHERE BUS='" & Trim(str1) & "'" '定义查询字符串 rst.Open str2 '打开记录集 If Not rst.EOF Then '若记录集不为空,显示内容 'gID = rst("id") '记录关键字 txtbus.Text = rst("bus") '线路名 txtBeginEnd.Text = rst("beginend") '运行区间 cmbTickType.Text = rst("ticktype") '售票类型 cmbPrice.Text = rst("price") '票价 If rst("ic") = True Then '支持IC卡 optIC1.Value = True Else '不支持IC卡

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧