هذا هو AutoCompleteTextBox الذي قام تيدي بتغليفه مؤخرًا. نحن نعلم أن TextBox الخاص بـ ASP.NET يدعم أيضًا بعض وظائف الإكمال التلقائي، ولكنه يعتمد على تنفيذ المستعرض ولا يمكنه تحديد مرشحين مخصصين للإكمال التلقائي. يعوض AutoCompleteTextBox المدرج في هذه المقالة عن هذا النقص. ما عليك سوى تعيين خاصية AutoCompleteTextBox.AutoCompleteData وتمرير سلسلة [] لجعل TextBox يدعم المرشحين المخصصين.
إذا لم يكن هناك مرشح يطابق الإدخال الحالي، فسيكونمنطق الإكمال التلقائي
هو نفسه مربع النص العادي؛
إذا كان هناك مرشح واحد فقط يطابق الإدخال الحالي، فسيتم إكماله تلقائيًا؛
إذا تطابق أكثر من مرشح مع الإدخال الحالي، فسيتم إكمال المرشح الأول تلقائيًا في مربع النص وسيظهر مربع منبثق يحتوي على جميع المرشحين.
المصدري للتنفيذ
في VS2005، ولكن في الواقع، لا يتم استخدام أي بناء جملة يعتمد على 2.0 تقريبًا، ويمكن تجميعه ضمن vs2003 مع الحد الأدنى من التعديلات.
باستخدام النظام؛
باستخدام System.Collections.Generic؛
باستخدام System.ComponentModel؛
باستخدام System.Text؛
باستخدام System.Web؛
باستخدام System.Web.UI؛
باستخدام System.Web.UI.WebControls؛
باستخدام System.Web.UI.HtmlControls؛
مساحة الاسم Ilungasoft.Framework.Web.UI.WebControls
{
[ToolboxData("<{0}:AutoCompleteTextBox runat=server></{0}:AutoCompleteTextBox>")]
AutoCompleteTextBox للفئة العامة: WebControl
{
الأعضاء الخاصون# المنطقة الأعضاء الخاصون
Private TextBox textBox = new TextBox();
Private HtmlGenericControl autoCompleteFrame = new HtmlGenericControl();
سلسلة خاصة ToJsStringArray(params string[] strs)
{
إذا (strs != null && strs.Length > 0)
{
StringBuilder sb = new StringBuilder();
sb.Append("new Array(");
foreach (سلسلة في السلاسل)
{
sb.Append(string.Format("'{0}', ", str.Replace("'", " \' ")));
}
return sb.ToString().TrimEnd(',', ' ') + ");";
}
آخر
{
إرجاع "مصفوفة جديدة؛"؛
}
}
سلسلة خاصة MakeUniqueID (معرف السلسلة)
{
إذا (معرف ! = null && id.Trim().Length > 0)
{
return string.Concat(this.UniqueID.Replace("$", "_"), "_", id);
}
آخر
{
إرجاع this.UniqueID.Replace("$", "_");
}
}
المنطقة
# خصائص المنطقة
[Bindable(true)]
[الفئة("المظهر")]
[القيمة الافتراضية("")]
[قابل للترجمة (صحيح)]
نص السلسلة العامة
{
يحصل
{
إذا (Page.IsPostBack)
{
textBox.Text = Page.Request.Form[MakeUniqueID("textBox")];
}
إرجاع textBox.Text؛
}
تعيين
{
textBox.Text = value;
}
}
[قابل للربط (صحيح)]
[الفئة("السلوك")]
[القيمة الافتراضية("")]
[قابل للترجمة (صحيح)]
كثافة العمليات العامة MaxLength
{
يحصل
{
إرجاع textBox.MaxLength;
}
تعيين
{
textBox.MaxLength = value;
}
}
[قابل للربط (صحيح)]
[الفئة("السلوك")]
[القيمة الافتراضية(خطأ)]
[قابل للترجمة (صحيح)]
المنطق العام للقراءة فقط
{
يحصل
{
إرجاع textBox.ReadOnly؛
}
تعيين
{
textBox.ReadOnly = value;
}
}
سلسلة عامة[] بيانات الإكمال التلقائي
{
يحصل
{
string[] s = (string[])ViewState["AutoCompleteData"];
إرجاع ((s == null) ? null : s);
}
تعيين
{
ViewState["AutoCompleteData"] = value;
}
}
#endregion
تجاوز الأعضاء# المنطقة
تجاوز الأعضاء المحميين تجاوز باطلة CreateChildControls()
{
create textBox#region create textBox
textBox.ID = MakeUniqueID("textBox");
textBox.AutoCompleteType = AutoCompleteType.Disabled;
textBox.Attributes.Add("onkeypress", string.Format("return __DoAutoComplete(event, '{0}')", MakeUniqueID(null)));
textBox.Attributes.Add("onblur", string.Format("if (!document.show_{0}) document.getElementById('{1}').style.display = 'none';"، MakeUniqueID(null) , MakeUniqueID("autoCompleteFrame")));
textBox.Width = Width;
#endregion
create autoCompleteFrame#region create autoCompleteFrame
autoCompleteFrame.TagName = "iframe";
autoCompleteFrame.ID = MakeUniqueID("autoCompleteFrame");
autoCompleteFrame.Attributes.Add("style", "display:none; الموضع: مطلق; الحدود: ريدج 1px");
autoCompleteFrame.Attributes.Add("frameborder", "0");
autoCompleteFrame.Attributes.Add("marginheight", "0");
autoCompleteFrame.Attributes.Add("marginwidth", "2");
autoCompleteFrame.Attributes.Add("scrolling", "auto");
autoCompleteFrame.Attributes.Add("width", Width.ToString());
autoCompleteFrame.Attributes.Add("height", "100px");
autoCompleteFrame.Attributes.Add("src", "javascript:''");
autoCompleteFrame.Attributes.Add("onmouseover", string.Format("document.show_{0} = true;", MakeUniqueID(null)));
"
onmouseout", string.Format("document.show_{0} = false;", MakeUniqueID(null)));
}
تجاوز محمي باطل OnPreRender(EventArgs e)
{
تسجيل كتلة البرنامج النصي للعميل# المنطقة تسجيل كتلة البرنامج النصي للعميل
إذا (!Page.ClientScript.IsClientScriptBlockRegistered("__DoAutoComplete"))
{
نص السلسلة = string.Concat(
"<script language="javascript" type="text/javascript">rn"،
" var isOpera = navigator.userAgent.indexOf('Opera') > -1;rn"،
" var isIE = navigator.userAgent.indexOf('MSIE') > 1 && !isOpera;rn",
" var isMoz = navigator.userAgent.indexOf('Mozilla/5.') == 0 && !isOpera;rn",
"rn"،
" وظيفة textboxSelect (oTextbox، iStart، iEnd)rn"،
" {rn"،
"التبديل (الوسائط. الطول) {rn"،
"الحالة 1:rn"،
" oTextbox.select();rn"،
"استراحة؛rn"،
"rn"،
"الحالة 2:rn"،
" iEnd = oTextbox.value.length;rn"،
" /* يقع خلال */rn"،
" rn"،
"الحالة 3: rn"،
"إذا (isIE) {rn"،
"var oRange = oTextbox.createTextRange();rn"،
" oRange.moveStart("character"، iStart);rn"،
" oRange.moveEnd("character", -oTextbox.value.length + iEnd); rn",
" oRange.select(); rn"،
" } وإلا إذا (isMoz){rn"،
" oTextbox.setSelectionRange(iStart, iEnd);rn"،
" } rn"،
" }rn"،
"rn"،
" oTextbox.focus();rn"،
" }rn"،
"rn"،
" الدالة textboxReplaceSelect (oTextbox, sText)rn"،
" {rn"،
"إذا (isIE) {rn"،
"var oRange = document.selection.createRange();rn"،
" oRange.text = sText;rn",
"oRange.collapse(true);rn"،
" oRange.select(); rn"،
" } وإلا إذا (isMoz) {rn"،
"var iStart = oTextbox.selectionStart;rn"،
" oTextbox.value = oTextbox.value.substring(0, iStart) + sText + oTextbox.value.substring(oTextbox.selectionEnd, oTextbox.value.length);rn"،
" oTextbox.setSelectionRange(iStart + sText.length, iStart + sText.length);rn",
" }rn"،
"rn"،
" oTextbox.focus();rn"،
" }rn"،
"rn"،
" وظيفة الإكمال التلقائي (sText، arrValues)rn"،
" {rn"،
" var retMatches = ""; rn",
" rn"،
" for (var i=0; i < arrValues.length; i++)rn"،
" {rn"،
"إذا (arrValues[i].indexOf(sText) == 0)rn"،
" {rn"،
" retMatches += arrValues[i] + ',';rn",
" }rn"،
" }rn"،
" rn"،
"إذا (retMatches.length > 0)rn"،
" {rn"،
" retMatches = retMatches.substr(0, retMatches.length - 1);rn",
" } rn"،
"rn"،
"إرجاع retMatches;rn"،
" }rn"،
"rn"،
" الدالة __DoAutoComplete(oEvent, id)rn"،
" {rn"،
" var oTextbox = document.getElementById(id + '_textBox');rn"،
" varframe = document.getElementById(id + '_autoCompleteFrame');rn"،
" var arrValues = document[id + '_data'];rn",
" rn"،
" التبديل (oEvent.keyCode) rn"،
" {rn"،
"الحالة 38: //السهم لأعلى rn"،
"الحالة 40: //السهم لأسفلrn"،
"الحالة 37: //السهم الأيسرrn"،
"الحالة 39: //السهم الأيمنrn"،
"الحالة 33: //الصفحة لأعلى rn"،
"الحالة 34: //الصفحة لأسفل rn"،
"الحالة 36: //المنزل rn"،
"الحالة 35: //النهاية rn"،
"الحالة 13: // أدخل rn"،
"الحالة 9: //علامة التبويب rn"،
"الحالة 27: //esc rn"،
"الحالة 16: //shift rn"،
"الحالة 17: //ctrl rn"،
"الحالة 18: //alt rn"،
"الحالة 20: //قفل الأحرف الكبيرةrn"،
"الحالة 8: // مسافة للخلف rn"،
"الحالة 46: //حذفrn"،
"إرجاع صحيح؛rn"،
"استراحة؛rn"،
" rn"،
"الافتراضي:rn"،
" textboxReplaceSelect(oTextbox, String.fromCharCode(isIE ? oEvent.keyCode : oEvent.charCode));rn",
" var iLen = oTextbox.value.length;rn"،
"rn"،
" var sMatches = autocompleteMatch(oTextbox.value, arrValues);rn",
"rn"،
"إذا (sMatches.length > 0)rn"،
" {rn"،
"var arrMatches = sMatches.split(',');rn"،
" oTextbox.value = arrMatches[0];rn"،
" textboxSelect(oTextbox, iLen, oTextbox.value.length);rn",
" rn"،
"إذا (arrMatches.length > 1)rn"،
" {rn"،
"frame.style.display = 'inline';rn"،
"frame.height = '100';rn"،
" rn"،
"frame.contentWindow.document.body.innerHTML = '';rn"،
" for (var i = 0; i < arrMatches.length; i++)rn"،
" {rn"،
"frame.contentWindow.document.body.innerHTML += '<div style="width: 100%; style.color=\'white\';" onmouseout="this.style.backgroundColor=\'\'; this.style.color=\'black\';" onclick= "parent.document.getElementById( \'' + id + '_textBox\').value = this.innerHTML">' + arrMatches[i] + '</div>';rn"،
" }rn"،
" rn"،
"frame.contentWindow.document.body.style.backgroundColor = 'white';rn"،
"frame.contentWindow.document.onclick = function() { document.getElementById(id + '_autoCompleteFrame').style.display = 'none'; };rn",
" } rn"،
" } rn"،
" rn"،
"إرجاع خطأ؛rn"،
" } rn"،
" }rn"،
"</script>rn"،
"");
Page.ClientScript.RegisterClientScriptBlock(typeof(string), "__DoAutoComplete", script);
}
إذا (!Page.ClientScript.IsClientScriptBlockRegistered(MakeUniqueID("data")))
{
Page.ClientScript.RegisterClientScriptBlock(typeof(string), MakeUniqueID("data"), string.Format("<script language="javascript" type="text/javascript">document.{0}_data = { 1}</script>"، MakeUniqueID(null), ToJsStringArray(AutoCompleteData)));
}
#endregion
}
تجاوز محمي RenderContents (إخراج HtmlTextWriter)
{
put.WriteLine(string.Format("<div onmouseleave="document.getElementById('{0}').style.display = 'none';" style="width:{1}" >"، MakeUniqueID("autoCompleteFrame"), Width));
textBox.RenderControl(output);
output.WriteLine("<br />");
autoCompleteFrame.RenderControl(output);
output.WriteLine("</div>");
}
#endregion
}
}
تحميل