PDA

View Full Version : سوال: جستجو در میان چند textbox و highlight کردن آن در زمان ویرایش اطلاعات database



reza4359
دوشنبه 12 مهر 1395, 23:34 عصر
سلام دوستان
من زمان ویرایش اطلاعات دیتابیس همه فیلد ها رو داخل چند textbox میریزم و بعد اصلاح میکنم
حالا چون تعداد فیلد های من زیاده و چند شماره داخل هر فیلد هست میخوام زمانی که اطلاعات جهت ویرایش داخل textbox ها نمایش داده شدند یک جستجو بزنم و اون فیلدی که جستجو میشه و داخل تکس باکس هست های لایت بشه و اون فیلدی که داخل داخل textbox مربوطه هست رو ویرایش کنم
حالا باید چکار کرد
من این تصویر رو میخوام
142913
وقتی شماره ای رو جستجو کردی اونو داخل textbox مربوطه پیدا کنه و های لایت کنه

mr.sirwan
جمعه 16 مهر 1395, 13:24 عصر
سلام دوستان من تصویر کاری که میخوام انجام بدم رو گذاشتم اگه کسی هست بلد باشه لطفا راهنمایی کنه
ممنون از همه

دوست عزیز این تصویری که شما گذاشتین هایلایت کردن نیست که، ولی شما فقط نیاز دارین یک Label ایجاد کنین و بهش پس زمینه نارنجی بدین همچنین خاصیت Visible رو برابر false قرار بدین، حالا موقعی که دکمه جستجو رو زدین بیاین توسط یک حلقه Foreach محتویات تمامی تکست باکس هارو چک کنین و وقتی محتوی یکی از تکست باکس ها برابر مقدار موردجستجو بود، بیاین خاصیت Text لیبلی که ایجاد کردیم رو برابر مقدار موردجستجو قرار بدین خاصیت Location رو نسبت به تکست باکس مربوطه تنظیم کنین و Visible این لیبل رو برابر true قرار بدین، تمام

کار خیلی راحتیه

reza4359
جمعه 16 مهر 1395, 15:00 عصر
دوست عزیز این تصویری که شما گذاشتین هایلایت کردن نیست که، ولی شما فقط نیاز دارین یک Label ایجاد کنین و بهش پس زمینه نارنجی بدین همچنین خاصیت Visible رو برابر false قرار بدین، حالا موقعی که دکمه جستجو رو زدین بیاین توسط یک حلقه Foreach محتویات تمامی تکست باکس هارو چک کنین و وقتی محتوی یکی از تکست باکس ها برابر مقدار موردجستجو بود، بیاین خاصیت Text لیبلی که ایجاد کردیم رو برابر مقدار موردجستجو قرار بدین خاصیت Location رو نسبت به تکست باکس مربوطه تنظیم کنین و Visible این لیبل رو برابر true قرار بدین، تمام

کار خیلی راحتیه

ممنون دوست عزیز میشه در خصوص کد چک کردن محتویات تکس باکس با استفاده از foreeach توضیخ بدید
در خصوص لیبل که گفتین نمیشه دیگه از لیبل استفاد نشه و فقط وقتی محتویات تکس باکس ها رو چک مردیم و با شماره مورد جستجو مقایسه شد همون تکس با کس مربوطه رو های لایت کنیم؟

daniyaltjm
جمعه 16 مهر 1395, 16:07 عصر
سلام شما با یک حلقه foreach می تونید این کار رو انجام بدی:

foreach (var item in Controls.OfType<TextBox>())
{
if (textBox1.Text == item.Text)
item.BackColor = Color.Orange;
}


textBox1.Text میتونه مقداری باشه که میخوای با همه تکست باکس ها مقایسه بشه

reza4359
جمعه 16 مهر 1395, 16:17 عصر
سلام شما با یک حلقه foreach می تونید این کار رو انجام بدی:

foreach (var item in Controls.OfType<TextBox>())
{
if (textBox1.Text == item.Text)
item.BackColor = Color.Orange;
}


textBox1.Text میتونه مقداری باشه که میخوای با همه تکست باکس ها مقایسه بشه

ممنون دوست عزیز و لی این کد رو گذاشتم هیچ عملی انجام نداد!!!

daniyaltjm
جمعه 16 مهر 1395, 16:21 عصر
خوب شما به جای textBox1.Text باید اون مقداری رو که می خوای توی تمام تکست باکس ها بگرده و اگه موجود بود رنگش رو نارنجی کنه رو باید بزاری الان شما چی قرار دادی؟

reza4359
جمعه 16 مهر 1395, 16:51 عصر
آره منم همون تکس باکس رو قرار دادم کد شما رو داخل یه پروژه جدید که ایجاد کردم گذاشتم به درستی کار کرد و لی تو برنامه خودم کارنکرد علتشم اینه که من از
using
Microsoft.Office.Interop.Excel
واسه کار با اکسل استفاده کردم و الان به textbox گیر میده
foreach (var item in Controls.OfType<TextBox>())

وفتی هم از این استفاده میکنم کد کار نمیکنه
System.Windows.Forms.TextBox
باید چکار کرد؟

mr.sirwan
جمعه 16 مهر 1395, 16:58 عصر
آره منم همون تکس باکس رو قرار دادم کد شما رو داخل یه پروژه جدید که ایجاد کردم گذاشتم به درستی کار کرد و لی تو برنامه خودم کارنکرد علتشم اینه که من از
using
Microsoft.Office.Interop.Excel
واسه کار با اکسل استفاده کردم و الان به textbox گیر میده
foreach (var item in Controls.OfType<TextBox>())

وفتی هم از این استفاده میکنم کد کار نمیکنه
System.Windows.Forms.TextBox
باید چکار کرد؟

سلام دوست عزیز، شما لطفا کدت رو کامل بذار اینجا و متن ارور رو هم بذار ببینیم چطور با وجود استفاده از System.Windows.Forms.TextBox بازم ارور میده؟!

mr.sirwan
جمعه 16 مهر 1395, 17:05 عصر
ممنون دوست عزیز میشه در خصوص کد چک کردن محتویات تکس باکس با استفاده از foreeach توضیخ بدید
در خصوص لیبل که گفتین نمیشه دیگه از لیبل استفاد نشه و فقط وقتی محتویات تکس باکس ها رو چک مردیم و با شماره مورد جستجو مقایسه شد همون تکس با کس مربوطه رو های لایت کنیم؟

همونطور که دوست خوبمون نمونه کد گذاشتن شما میتونی رنگ خود تکست باکس رو عوض کنی و همچنین میتونی متن رو در حالت انتخاب قرار بدی، نحوه انتخاب متن به اینصورت هست:


TextBox.Focus();
TextBox.SelectAll();

reza4359
جمعه 16 مهر 1395, 17:07 عصر
این uising هایی که استفاده شده
using System;
using System.Collections.Generic;
using System.ComponentModel;

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.Sql;
using System.Windows.Forms;
using System.Reflection;
using System.Windows.Forms.Design;
using System.IO;
using System.Data.SqlClient;
using System.Globalization;
using System.Runtime.InteropServices;
using EMsgBox;

using Microsoft.Office.Interop.Excel;
using System.Configuration;

using System.Data.OleDb;

using System.Drawing.Drawing2D;
using System.Resources;
using Excel = Microsoft.Office.Interop.Excel;

اینم کد شما

foreach (var item in Controls.OfType<System.Windows.Forms.TextBox>())
{
if (textBoxX26.Text == item.Text)
item.BackColor = Color.Orange;
}
در این صورت ارور نمیده ولی کار هم نمیکنه
همین کد شما رو وقتی در یک پروژه دیگه که از
using Microsoft.Office.Interop.Excel;
استفاده نشده قرار میدم به درستی کار میکنه
حالا مشکل چیه به نظر شما

محمد آشتیانی
جمعه 16 مهر 1395, 17:15 عصر
سلام
آیا TextBox های شما ، همون تکست باکس های استاندارد دات نت هستن؟ از اسم TextBoxX26 به نظر میاد اینطور نیست

mr.sirwan
جمعه 16 مهر 1395, 17:16 عصر
این uising هایی که استفاده شده
using System;
using System.Collections.Generic;
using System.ComponentModel;

using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.Sql;
using System.Windows.Forms;
using System.Reflection;
using System.Windows.Forms.Design;
using System.IO;
using System.Data.SqlClient;
using System.Globalization;
using System.Runtime.InteropServices;
using EMsgBox;

using Microsoft.Office.Interop.Excel;
using System.Configuration;

using System.Data.OleDb;

using System.Drawing.Drawing2D;
using System.Resources;
using Excel = Microsoft.Office.Interop.Excel;

اینم کد شما

foreach (var item in Controls.OfType<System.Windows.Forms.TextBox>())
{
if (textBoxX26.Text == item.Text)
item.BackColor = Color.Orange;
}
در این صورت ارور نمیده ولی کار هم نمیکنه
همین کد شما رو وقتی در یک پروژه دیگه که از
using Microsoft.Office.Interop.Excel;
استفاده نشده قرار میدم به درستی کار میکنه
حالا مشکل چیه به نظر شما

شما مطمئنین که دارین از کنترل های خود Visual Studio استفاده میکنین و ار هیچ کامپوننتی جهت زیباسازی کنترل ها استفاده نمیکنین؟
اگه اون عکسی که توو پست اول گذاشتین مال خودتون باشه، پس در اینصورت از کامپوننت استفاده میکنین، باید از کلاس های همون کامپوننت به جای System.Windows.Forms.TextBox استفاده کنین


با عرض پوزش از جناب آشتیانی عزیز، جواب ها همزمان ارسال شدن :گیج: :لبخندساده:

reza4359
جمعه 16 مهر 1395, 17:18 عصر
سلام نه من ازdevconmonnent استفاده میکنم
البته داحل اون پروژه جدید که قرار دادم اونجا با dev کار کرد مشکلی نداشت
ولی اینجا فقط به کلمه textbox
گیر میده اونم به خاطر استفاده از
using Microsoft.Office.Interop.Excel;

mr.sirwan
جمعه 16 مهر 1395, 17:28 عصر
شما به جای System.Windows.Forms.TextBox از DevComponent.DotNetBar.Controls.TextBoxX داخل حلقه استفاده کنین

reza4359
جمعه 16 مهر 1395, 17:29 عصر
دوستان فکر کنم مشکل از همون عدم استفاده از کلاس devcomponnent به جای
System.Windows.Forms.TextBox

این کلاس هستش
حالا چطوری از کلاس dev به جای کد بالا استقاده کنم؟

reza4359
جمعه 16 مهر 1395, 17:32 عصر
DevComponent.DotNetBar.Controls.TextBoxX
گذاشتم بازم کار نکرد!!!!!!!!!!؟؟

mr.sirwan
جمعه 16 مهر 1395, 17:37 عصر
DevComponent.DotNetBar.Controls.TextBoxX
گذاشتم بازم کار نکرد!!!!!!!!!!؟؟

شما برنامه رو Trace کنین و ببینین حلقه اجرا میشه یا خیر

reza4359
شنبه 17 مهر 1395, 00:22 صبح
سلام دوست عزیز برنامه را trace کردم متاسفانه حلقه اجرا نمیشه نمیدونم مشکل از کجاست
داخل پروژه جدیدی که ایجاد کردم و کد رو گذاشتم حلقه با trace اجرا میشه ولی داخل این برنامه نمیدونم مشکل کجاست که بعد از foreeach وارد شرط نمیشه

mr.sirwan
شنبه 17 مهر 1395, 00:32 صبح
ولی داخل این برنامه نمیدونم مشکل کجاست که بعد از foreeach وارد شرط نمیشه

یعنی چی؟ یعنی وارد حلقه میشه؟ اما شرط برقرار نیست؟


همین الان تست کردم، با devcomponent هم تست کردم مشکلی نداشتم قشنگ کار میکرد

reza4359
شنبه 17 مهر 1395, 00:46 صبح
وارد حلقه میشه قسمت in را چک میکنه ولی var item رو چک نمیکنه و بعد به انتهای حلقه آکولاد بسته پرش میکنه و خارج میشه نمیدونم مشکلش چیه
تو همون برنامه یه فرم جدید گذاشتم و چند تا تکس دادم و اجرا شد ولی تو این فرم هر کاری میکنم اجرا نمیشه دیگه کلافه شدم
foreach (var item in Controls.OfType<DevComponents.DotNetBar.Controls.TextBoxX>())

mr.sirwan
شنبه 17 مهر 1395, 01:13 صبح
وارد حلقه میشه قسمت in را چک میکنه ولی var item رو چک نمیکنه و بعد به انتهای حلقه آکولاد بسته پرش میکنه و خارج میشه نمیدونم مشکلش چیه
تو همون برنامه یه فرم جدید گذاشتم و چند تا تکس دادم و اجرا شد ولی تو این فرم هر کاری میکنم اجرا نمیشه دیگه کلافه شدم
foreach (var item in Controls.OfType<DevComponents.DotNetBar.Controls.TextBoxX>())

احتمال میدم به خاطر این باشه که تکست باکس هاتون داخل Group panel هستن، برای رفع این مشکل شما نام group panel رو قبل از Controls بنویسید، به این صورت:

foreach (var item in groupPanel1.Controls.OfType<DevComponents.DotNetBar.Controls.T extBoxX>())
{}

محمد آشتیانی
شنبه 17 مهر 1395, 09:21 صبح
سلام
این متد رو بنویس

public void ChangeBackColor(Control control, String compareValue)
{
if (control.GetType() == typeof(DevComponents.DotNetBar.Controls.TextBoxX))
{
var textBox = DevComponents.DotNetBar.Controls.TextBoxX)control;
textBox.BackColor = Color.White;

if (textBox.Text == compareValue)
{
textBox.BackColor = Color.Orange;
}
}


foreach (Control child in control.Controls)
{
ChangeBackColor(child);
}
}



و هرجا خواستی ، به اینصورت فراخوانی کن
ChangeBackColor(this, textBoxX26.Text);

reza4359
شنبه 17 مهر 1395, 19:55 عصر
احتمال میدم به خاطر این باشه که تکست باکس هاتون داخل Group panel هستن، برای رفع این مشکل شما نام group panel رو قبل از Controls بنویسید، به این صورت:

foreach (var item in groupPanel1.Controls.OfType<DevComponents.DotNetBar.Controls.T extBoxX>())
{}







آره مشکل همین بود درست شد از همه دوستان عزیز آقای سیروان و آقای آشتیانی ممنونم که وقت گذاشتند

reza4359
شنبه 17 مهر 1395, 20:12 عصر
آقای آشتیانی این متد را که گذاشتید فکر کنم این قسمتش دو تا آرگمان داره
foreach (Control child in control.Controls) {
ChangeBackColor(child);

}


درسته؟

محمد آشتیانی
شنبه 17 مهر 1395, 20:57 عصر
آقای آشتیانی این متد را که گذاشتید فکر کنم این قسمتش دو تا آرگمان داره
foreach (Control child in control.Controls) {
ChangeBackColor(child);

}


درسته؟

سلام
بله ، عذر خواهی میکنم فراموش شده ، بعنوان آرگومان دوم بنویسید : compareValue

reza4359
سه شنبه 20 مهر 1395, 17:06 عصر
با سلام خدمت دوستان خوبم
اگه بخوایم با جستجوی جدید نتایج قبلی جستجو از حالت high light خارج شوند باید چکار کرد؟
ممنون

daniyaltjm
سه شنبه 20 مهر 1395, 17:10 عصر
با سلام خدمت دوستان خوبم
اگه بخوایم با جستجوی جدید نتایج قبلی جستجو از حالت high light خارج شوند باید چکار کرد؟
ممنون

سلام کافیه قبل از عمل های لایت کردن با همون حلقه Foreach رنگ تمام تکست باکس ها رو به حالت اول برگردونی.

محمد آشتیانی
سه شنبه 20 مهر 1395, 18:26 عصر
با سلام خدمت دوستان خوبم
اگه بخوایم با جستجوی جدید نتایج قبلی جستجو از حالت high light خارج شوند باید چکار کرد؟
ممنون

سلام
همین الان هم متد ChangeBackColor این کار رو هنگام فراخوانی انجام میده ، این خط منظورم هست ، در واقع قبل از اینکه شرط برای highlight کردن چک بشه زمینه تکست باکس ها به حالت اولیه برمیگردن.

textBox.BackColor = Color.White;

reza4359
یک شنبه 02 آبان 1395, 09:04 صبح
سلام به دوستان عزیز برنامه نویس
با توجه به موضوع بالا چطوری میتونم در زمان ویرایش وقتی تمام اطلاعات درون نکس باکسها قرار میگیره و وقتی کاربر یکی از textbox ها رو خالی کرد و پاک کرد آخرین textbox که پر میباشد را به آن تکس باکس خالی انتقال دهد
امیدوارم منظورم رو درست رسانده باشم
ممنون

reza4359
شنبه 08 آبان 1395, 10:28 صبح
سلام دوستان عزیز میشه راجع به این قضیه راهنمایی کنید