PDA

View Full Version : سوال: دریافت متن و مقدار کمبوباکس (Text و Value) از فایل متنی با شرط



mjzaret
پنج شنبه 12 آذر 1394, 12:17 عصر
سلام

من تازه شروع به برنامه نویسی دلفی کردم.

الان یه فایل تکست به صورت زیر دارم:


Javad|Mohamadi|1363
Ali|Rezaee|1365
Maryam|Miri|1362
Javad|Alizadeh|1358
Ali|Rahimi|1359
Javad|Kazemi|1375

حالا می‌خوام این اطلاعات درون کمبو باکس قرار بدم.

با کد زیر این کار رو انجام دادم.


procedure TForm1.rbtnJavadClick(Sender: TObject);
var
Content:TStringList;
I:integer;
s:string;
Line:TStringList;
begin
if rbtnJavad.Checked then
begin
cmbFamily.Clear;
Content:=TStringList.Create;
Content.LoadFromFile('Data.txt');
for I := 0 to Content.Count -1 do
begin
Line:=TStringList.Create;
Line.Delimiter:='|';
Line.DelimitedText:=Content[I];
if Line[0].Equals('Javad') then
begin
cmbFamily.Items.Add(Line[2]);
Line.Free;
end;
end;
Content.Free;
cmbFamily.ItemIndex:=0;
end;
end;

یعنی زمانی که رادیو باتن Javad انتخاب شد نام خانوادگی آنها در کمبوباکس نمایش می‌دهد.

تا این قسمت مشکلی نیست.

من می‌خوام از مقادیر جلوی نام خانوادگی هم در جای دیگر استفاده کنم.

به نوعی مقدار نمایشی من در کمبوباکس قسمت دوم جداکننده باشد ولی مقداری که به من میدهد قسمت سوم جدا کننده باشد.

شاد باشید

Mask
پنج شنبه 12 آذر 1394, 15:24 عصر
بازم جستجو رو بهتون پیشنهاد میکنم. در رابطه با این سوالات به کرات در این تالار بحث شده.
http://barnamenevis.org/showthread.php?289501-%D8%AA%D9%81%DA%A9%DB%8C%DA%A9-%DB%8C%DA%A9-%D8%B1%D8%B4%D8%AA%D9%87-%D8%A7%DB%8C-%DA%A9%D9%87-%D8%A8%D8%A7-%DB%8C%DA%A9-%DA%A9%D8%A7%D8%B1%D8%A7%DA%A9%D8%AA%D8%B1-%D8%AE%D8%A7%D8%B5-%D8%AC%D8%AF%D8%A7%D8%B4%D8%AF%D9%87-%D8%A7%D8%B3%D8%AA&p=1274034&viewfull=1#post1274034

mjzaret
پنج شنبه 12 آذر 1394, 16:36 عصر
از اینکه به سوالم پاسخ دادید تشکر می‌کنم.

من مشکلی در جدا کردن رشته‌ها ندارم.

مشکلم در مورد مقدار نشان داده شده در کمبو باکس و مقدار اصلی آن است.

راحت تر عرض کنم: هرگاه رادیوباتن Javad رو انتخاب کردم نام خانوادگی اونهایی که Javad هست در کمبوباکس قرار می‌گیره.

حالا می‌خوام زمانی که نام خانوادگی Alizadeh را انتخاب کردم مقدار 1358 که در قسمت سوم قرار دارد به من برگرداند.

یعنی از مقدار 1358 در دستورات بعدی می‌خوام استفاده کنم نه مقدار نشان داده شده در کمبوباکس.

من در سی شارپ به این صورت عمل کردم:

کلاسی تعریف کردم و کدهای زیر رو درش قرار دادم.

using System;
using System.Collections.Generic;
using System.Text;

namespace _MYEXE
{
class Address
{
private string _Id;
private string _Description;
private string _Port;

public string Id
{
get
{ return _Id; }
set
{ _Id = value; }
}
public string Description
{
get
{ return _Description; }
set
{ _Description = value; }
}

public string Port
{
get
{ return _Port; }
set
{ _Port = value; }
}
public Address(string id, string description, string port)
{

this._Id = id;
this._Description = description;
this._Port = port;
}
}
}

و از این کد در برنامه‌ام استفاده می‌کردم.

حالا چنین چیزی در دلفی نیاز دارم.

شاد باشید :لبخندساده:

Mask
پنج شنبه 12 آذر 1394, 17:30 عصر
هر چی خوندم. نگرفتم منظورتون رو.
فایل اجرایی c# رو بزارید تا ببینم مشکلتون کودوم قسمته.

RahmanAmiriSh
پنج شنبه 12 آذر 1394, 18:33 عصر
منم متوجه منظورت نشدم عزیز دلم ، خوب کاری نداره هر کدوم از قسمت ها رو تو یه فایل متنی جداگانه بزار تا اینقدر اذیت نشی برادر من

mjzaret
پنج شنبه 12 آذر 1394, 18:47 عصر
راحت تر موضوع رو بیان می‌کنم.

من فرمی شبیه این دارم:

http://s3.picofile.com/file/8226164534/Form2.png

لیستی هم به صورت زیر در یک فایل متنی دارم:


rbtn1|USA1|1.1.1.1|4030
rbtn1|USA2|2.2.2.2|4030
rbtn1|USA3|3.3.3.3|4030

rbtn2|UK1|11.1.1.1|3128
rbtn2|UK2|22.2.2.2|3128
rbtn2|UK3|32.3.3.3|3128

rbtn3|CK1|11.11.1.1|443
rbtn3|CK2|22.22.2.2|443
rbtn3|CK3|32.33.3.3|443

زمانی که فرم لود شد با توجه به اطلاعاتی که درون فایل متنی دارم درون کمبوباکس قرار می‌گیرد.

این کار رو با توجه به کدی که در پست اول نوشتم انجام دادم.

در فایل متنی من قسمتها با کاراکتر "|" از هم جدا می‌شوند.

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

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

قسمت سوم مقدار مورد نیاز هست که باید در موقع کلیک کردن باتن1 ازش استفاده بشود.

قسمت چهارم هم همینطور مثل قسمت سوم هست.

مثال:

اگر رادیو باتن 1 رو انتخاب کنم از اطلاعات درون فایل متنی مقادیر:

USA1
USA2
USA3

درون کمبوباکس قرار می‌گیرد.

حال اگر من اگر USA2 از درون کمبوباکس رو انتخاب کردم اونوقت مقدار 2.2.2.2 به من تحویل داده بشه تا بتونم در قسمت رویداد کلیک باتن1 استفاده کنم.

شاد باشید :لبخندساده:

RahmanAmiriSh
پنج شنبه 12 آذر 1394, 20:57 عصر
راستش رو بخای من نگرفتم :قهقهه:
ولی به نظم برای اینکار از دیتابیس استفاده کنی بهتره ،
اگه اسرار داری که حتما فایل متنی باشه می تونی از چند فایل متنی استفاده کنی که راحت تره مثلا می تونی برای قسمت اول یک فایل ، قسمت دوم یک فایل و قسمت سوم یک فایل ، حالا با استفاده از خاصیت Index براحتی میتونی اون چیزی که می خای رو بدست بیاری

hp1361
پنج شنبه 12 آذر 1394, 21:03 عصر
سلام.

شما میتونید در آیتم های کومبوباکس بجای استفاده از Add خالی که یک رشته رو اضافه میکنه(به عنوان آیتم) از AddObject استفاده کنید. حالا اینطوری هم یک رشته اضافه می کنید(مثل قبل) و هم یک آبجکت. نکته هم اینجاست که این آبجکت شما میتونه دوباره رشته باشه(همون چیزی که شما لازمش دارید) فقط یادتون باشه در زمان خوندن مقدار آبجکت باید اون رو کست کنید(مثلا String(obj) رو بنویسین)

موفق باشیم

mjzaret
یک شنبه 15 آذر 1394, 12:18 عصر
راستش رو بخای من نگرفتم :قهقهه:
ولی به نظم برای اینکار از دیتابیس استفاده کنی بهتره ،
اگه اسرار داری که حتما فایل متنی باشه می تونی از چند فایل متنی استفاده کنی که راحت تره مثلا می تونی برای قسمت اول یک فایل ، قسمت دوم یک فایل و قسمت سوم یک فایل ، حالا با استفاده از خاصیت Index براحتی میتونی اون چیزی که می خای رو بدست بیاری

زیاد سخت نگفتم.:متعجب::متفکر::ناراحت:

راحت موضوع رو بیان کردم.

میخوام برای زیبایی کار نوشته در کمبوباکس نمایش داده بشه ولی مقدار واقعی چیز دیگری باشد.

مثال رو توجه کنید.

رادیو باتن 1 رو انتخاب کردم مقادیر:

USA1
USA2
USA3

در کمبوباکس نمایش داده شود.

حال می‌خواهم مقدار متناظر با هر آیتم در کمبوباکس برای استفاده‌های بعدی به صورت زیر باشد:

1.1.1.1
2.2.2.2
3.3.3.3

یعنی اگر من از لیست کمبوباکس USA2 رو انتخاب کردم مقدار 2.2.2.2 رو به من برگردونه.

شاد باشید :لبخندساده:

mjzaret
یک شنبه 15 آذر 1394, 12:22 عصر
سلام.

شما میتونید در آیتم های کومبوباکس بجای استفاده از Add خالی که یک رشته رو اضافه میکنه(به عنوان آیتم) از AddObject استفاده کنید. حالا اینطوری هم یک رشته اضافه می کنید(مثل قبل) و هم یک آبجکت. نکته هم اینجاست که این آبجکت شما میتونه دوباره رشته باشه(همون چیزی که شما لازمش دارید) فقط یادتون باشه در زمان خوندن مقدار آبجکت باید اون رو کست کنید(مثلا String(obj) رو بنویسین)

موفق باشیم

میشه در این مورد توضیح بیشتری بدید.

در انجمن جستجو کردم و کمی اطلاعاتم رو افزایش دادم.

در قسمت دوم چطور از رشته استفاده کنم؟

من در موقع اضافه کردن آیتم به کمبوباکس از دستور زیر استفاده می‌کنم:


CmoboBox.Items.Add(Line[1])

حالا در مورد AddObject نمی‌دونم چطور رشته‌ای که از TStringList به دست میارم رو به کار ببرم؟

شاد باشید :لبخندساده:

hp1361
یک شنبه 15 آذر 1394, 13:10 عصر
سلام


procedure TMainForm2.Button1Click(Sender: TObject);
var
StrLst: TStringList;
Str: string;
begin
ComboBox1.Items.Clear;
for Str in StrLst do
begin
ComboBox1.Items.AddObject(Str, 'Your String');
end;
end;


توی کد بالا مقدار str از stringlist خونده میشه و در کومبو باکس به عنوان آنچه کاربر میبینه ریخته میشه. و قسمت 'Your String' هم مقداریه که شما دوست دارید بعدا بدستش بیارید!

حالا هر جا نیاز داشتی اون مقدار رو بخونی از کد زیر میتونی استفاده کنی:

StrCast:=string(ComboBox1.Items.Objects[ComboBox1.ItemIndex]);


StrCast هم که از نوع String هستش.

موفق باشیم.

mjzaret
یک شنبه 15 آذر 1394, 23:00 عصر
وقتی من دستور شما رو برای اضافه کردن آیتم وارد می‌کنم به من اخطار میده:


[dcc32 Error] Unit1.pas(80): E2010 Incompatible types: 'TObject' and 'string'

شاد باشید :لبخندساده:

mjzaret
سه شنبه 17 آذر 1394, 13:51 عصر
تونستم با راهنمایی‌های شما مشکلم رو حل کنم.

آیا راه حلی وجود داره که بتونم سه مولفه رو ذخیره‌سازی کنم و ازشون استفاده کنم؟

شاد باشید :لبخندساده: