mfc/MySQL 问题:获取编辑框的值,输入一段字符,再按Backspace删除掉字符时程序崩溃

博客讨论了在MFC应用中使用Combo控件进行实时搜索时遇到的问题。当用户输入字符后又通过Backspace删除时,程序由于未处理编辑框为空的情况导致崩溃,错误源于libmysql.dll。解决方案是检查编辑框是否为空,如果为空则不执行查询,而是直接重新加载数据库数据,避免了访问冲突。然而,博客作者未能揭示崩溃的具体原因。
摘要由CSDN通过智能技术生成

问题描述

mfc中使用combo控件,在控件中输入数据,以求下拉框中出现与所输入字符相关的文字来,使用

editupdate消息来实时刷新。

但是,在先获取编辑框的值,输入一段字符,再按Backspace删除掉字符的时崩溃。

报错:0x000007FEE0BD38D6 (libmysql.dll)处(位于 ProjectManage.exe 中)引发的异常:

0xC0000005: 读取位置 0x0000000000000 时发生访问冲突

解决办法

后来想了一下,觉得是在使用combo控件的时候,程序里没有处理“编辑框为空”的情况。

if (v_EditText == "")
		{
			//AfxMessageBox(_T("输入的数据不完整,请重新输入!"));
			sql_select.Format("select distinct sensor_type from testManage where sensor_type!=\"\"");
			mysql_query(&mysqlCon, (char*)(LPCTSTR)sql_select);
			result = mysql_store_result(&mysqlCon);
			while ((row = mysql_fetch_row(result)))
			{
				m_combo_select_sensor_type.AddString(row[0]);
			}
			UpdateData(false);
			mysql_close(&mysqlCon);
			return;
		}

所以,当为空的时候不查询,直接重新读取一次数据库,然后直接返回,可以避免这个错误。

但是,是为什么报错,至今没有找出来。

在浏览器环境中,当用户通过键盘操作(如Backspace删除已选中的字符串内容,浏览器本身并不会主动向前端发送额外的信息。但是,你可以利用现代浏览器提供的事件模型和API来监听这个过程,间接地获取到用户删除的信息。以下是几种常用的方法: 1. **使用`input`事件**: 当用户更改输入字段的内容,`input`事件会被触发。你可以设置一个定器或者`MutationObserver`来监控`value`的变化,如果发生的减少,就可能是用户删除了一些字符。 ```javascript let inputEl = document.getElementById('myInput'); inputEl.addEventListener('input', function() { if (this.value.length < previousValue) { // 如果变短 console.log('用户删除了内容'); // 这里可以进一步分析删除字符或位置 previousValue = this.value.length; } }); ``` 2. **监听`delete`键按下**: 使用`keydown`或`keyup`事件,可以捕获到`Backspace`键的按下。但这种方法需要你自己跟踪删除前的状态,因为`input`事件可能并不总是立即触发。 ```javascript document.addEventListener('keydown', function(event) { if (event.key === 'Backspace') { // 记录当前状态,比如和光标位置 if (previousValue !== undefined && currentCursorPosition > previousCursorPosition) { console.log('用户删除了一个字符'); } previousValue = inputEl.value; currentCursorPosition = inputEl.selectionStart; } }, true); ``` 记住,这些方法并不是完美的,因为它们依赖用户的实操作和浏览器的事件延迟,可能存在一定的误差。如果你需要更精确的操作反馈,可能需要结合其他技术,例如`contentEditable`区域或者更复杂的富文本编辑库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值