تمامی فعالیت ها

این جریان به طور خودکار بروز می شود   

  1. امروز
  2. هفته گذشته
  3. جدیدا
  4. با سلام من چگونه می توانم با استفاده از HttpWebReques یک عنصر مانند یک textbox را حذف کنم؟ برای مثال هنگامی که از یک سایت در داخل مرورگر با کلیک سمت راست و اجرای دستور Inspect ما میتوانیم یک tag یا یک عنصر را Delete کنیم، این عملیات حذف بوسیله کد نویسی در ASp.net چگونه می باشد؟ با تشکر
  5. سلام دوستان من میخوام یه برنامه وین فرم برای یه سایت موزیک وردپرسی بسازم که در اون میخوام کاربر بتونه لاگین کنه و لیست اهنگ ها به کاربر نشان داده بشه و از این جور چیزا مثل برنامه سورنا کسی میتونه کمکم کنه یا منبعی رو بهم معرفی کنه ممنون میشم
  6. سلام الان کدوم نسخه ویژوال استدیو رو نصب داری ؟ از ارور اسکرین شات بزار
  7. باسلام من بعد نصب کامل ویژوال استودیو زمانیکه بخوام یک projectجدید چ از نوع consoleچ web ایجاد کنم با پیغام خطای نبودن کامپایلر سی شارپ و نصب دوباره ویژوال مواجه میشم باید چیکار کنم ده بار ویژوال نصب کردم باورژن های مختلف اما هربار در بخش new project خطا میده
  8. بسم الله الرحمن الرحیم سلام؛ به درخواست دوستان، یه سیستم زنگ هوشمند مدرسه قرار هست بسازیم. البته تو هوشمند بودنش شک دارم ولی خب از اونجا که هر کسی به هر چیزی که یه چیپ داشته باشه بهش عبارت #هوشمند می چسبونه، منم تصمیم گرفتم بهش بگم هوشمند. خب بریم سراغ لوازم مورد نیاز، نکته اینکه لازم نیست عینا همین ها رو بخرید، می توانید از مدل های مشابه هم استفاده کنید. اگر در خرید و انتخاب شک دارید، همینجا بپرسید! مواد لازم: 1. یک برد آردوئینو. من برای این کار UNO رو پیشنهاد میدم! چون به راحتی هم پروگرام میشه، تازه قیمتش هم خیلی کمه و برای کار ما هم کافیه! 2. ماژول ساعت فوق دقیق DS3231، یه ماژول قدرتمند و کم مصرف با قیمت ارزان! تا سال 2100 برنامه ریزی شده و علاوه بر ساعت، تاریخ رو هم داره که البته مورد نیاز ما نیست! از همه مهم تر یک باتری ساعت هم داره که در صورتی که برق قطع شد، زمان بندی ما به فنا نره . اگرچه تاریخش شاید برای مدارس مهم باشه تا در ایام تعطیل زنگ کار نکنه! ولی خب کلا از برق بکشیمش بیرون بهتره. 3. ماژول رله Relay Module: این رو برای مدیریت برق نیاز داریم! یدونه تک کاناله بخرید! خرج الکی هم نکنید! 4. مقداری سیم مناسب با ولتاژ 220 ولت و 5 ولت و همچنین به یک زنگ مدرسه هم نیاز داریم! حالا بریم سراغ وصل کردن این لوازم! توی UNO ما پایه SDA ماژول رو به پایه A4 و پایه SLC رو به پایه A5 آردوئینو وصل کردیم. VCC رو هم به 3.5 ولت و GND هم که تکلیفش مشخصه! من برای روشن کردن زنگ از پایه 6 دیجیتال استفاده کردم که به دلخواه خودتون می تونید از پایه دیجیتال دیگری هم استفاده کنید! یه سیم به پایه 6 وصل می کنید. این پایه در اصل رله رو کنترل می کنه، این پایه رو باید به پایه in رله متصل کنید. VCC و GND رله رو هم به پایه های مربوطه روی آردوئینو متصل کنید. در آخر کابل برق رو به رله وصل کنید. (سیم نول مستقیم به زنگ متصل می شه، رله رو سر راه سیم فاز قرار بدید تا مدار رو قطع و وصل کنه!). پایان! سعی کنید کار رو تمیز انجام بدید و قبل از لحیم کاری از بردبورد استفاده کنید تا صحت اتصالات رو بسنجید. اگر هم لحیم کاری بلد یستید، قبل از اینکه خودتون و وسایل رو بسوزونید برید به یه تعمیرکار لوازم الکترونیک رجوع کنید و جان خودتون رو نجات بدید! بگذریم! حالا نوبت برنامه نویسی هست. من برای این زنگ مدرسه اینترفیس خاصی در نظر نگرفتم و همونطور که گفتم موقع کامپایل دیگه زمان ها رو مشخص می کنیم! البته اگر می خواید از طریق راه دور و با بلوتوث زنگ ها رو کنترل کنید هم بگید تا انجامش بدیم ولی خب فکر کنم لازم نیست اصلا، چون زنگهای مدرسه ثابته و تغییر ندارند! 1. کابل USB رو به برد متصل کنید. 2. این کتابخونه رو دانلود کنید و در IDE آردوئینو اضافه و سپس به پروژه بیافزایید! 3. کدهای زیر رو وارد محیط برنامه نویسی کرده و آپلود کنید روی برد! //این همون کتابخونه است که دانلود کردیم! #include <DS3231.h> //این کتابخونه رو دستی اضافه کنید (بنویسیدش!) #include <Wire.h> //یک شی از RTCDateTime میسازیم تا زمان رو در اون ذخیره کنیم //و به جزییاتش دست پیدا کنیم RTCDateTime dt; // یک ساعت از کتابخونه مورد نظر می سازیم DS3231 clock; void setup() { // put your setup code here, to run once: Serial.begin(9600); // شروع به کار ماژول رو اعلام می کنیم Serial.println ("Initialize DS3231"); //ساعت شروع به کار می کند: clock.begin (); //زمان رو از کامپیوتر دریافت و تنظیم می کنیم: clock.setDateTime (__DATE__, __TIME__); //پایه 6 رو به عنوان پایه خروجی تنظیم می کنیم pinMode (6, OUTPUT); } void loop() { // put your main code here, to run repeatedly: // مقدار زمان رو در متغیر میریزیم و سپس چاپ می کنیم: dt = clock.getDateTime (); Serial.print ("Raw Time: "); Serial.print (dt.hour); Serial.print (":"); Serial.print (dt.minute); Serial.print (":"); Serial.print (dt.second); Serial.println (""); //یک تاخیر 1 ثانیه ای برای هر بار چاپ لحاظ می کینم: delay(1000); //یک شرط قرار دادیم که اگر ساعت 13 و دقیقه 23 و ثانیه کمتر از 5 // بود پایه 6 رو فعال کنه. if ( (dt.hour == 13) && (dt.minute == 23) && (dt.second < 5) ) { digitalWrite(6, HIGH); } else { //اگر هم نبود، عیر فعال کنه! digitalWrite(6, LOW); } } نکته: برای اینکه بتونید خروجی رو ببینید، CTRL + Shift + M رو بزنید! سعی کردم مستند نویسی کنم تا هم با کدها آشنا بشید و هم اینکه بتونید تغییرات دلخواه رو بدید، اگر سوالی بود در خدمتم! فایل پروژه رو هم در انتها می تونید دانلود کنید. school.ino
  9. سلام؛ چگونه می توانم از طریق کد نویسی یک هات اسپات ایجاد کنم؟! می خواهم یک هات اسپات دلخواه ایجاد کرده و یک روتر ایجاد کنم. اشتراک گذاری اینترنت مد نظرم نیست و تنها اتصال دستگاه ها و تبادل اطلاعات برایم مهم هست.
  10. c#

    سلام باید پراپرتی رو تنظیم کنی
  11. c#

    خب داداش من خیلی مبتیدیم و اینم برنامه ی ازمایشی منه.میتونی متوجهم کنی چجوری؟برم رو پراپرتی ها درستش کنم یا ایونتی رو کدگذاری کنم؟
  12. c#

    سلام شما باید با خاصیت ancher رو برای کنترل ها تنظیم کنید
  13. c#

    بندع ی برنامه نویس مبتدی هستم و تازه سی شارپ رو شروع کردم.تو فرمی که ساختم متاسفانه وقتی اپ رو اجرا میکنم و پنجره رو بزرگ میکنم اجزای داخل فرم بهمراش بزرگ نمیشن و میرن ی گوشه کوچیک باقی میمونن.کمک لطفا
  14. سلام به وین نویسی های عزیز، امروز آموزش استفاده از دیتابیس SQlite در زامارین فرمز رو برای شما آماده کردم. این آموزش بر پایه دیتابیس آماده، درون پروژه می باشد. برای این آموزش نیاز هست که کتابخانه Sqlite-net-pcl رو در هر سه پروژه iOS,Android و UWP نصب کنید. نکته: همیشه ویژوال استودیو را با Run as Administrator باز کنید تا مشکلی برای شما در حین ساخت پروژه، بروز رسانی کتابخانه ها و... پیش نیاید. پروژه ای جدید از نوع Cross Platform App به نام WN XF Database ایجاد نمایید. (نکته: من اینجا اشتباها اومدم توی پوشه ی پروژه های ویژوال استودیو این پروژه رو ایجاد کردم. در اولین نگاه شاید بگید که این که اشکالی نداره، اما وقتی کار کنید میبیند که در پروژه اندروید هر کلاسی که اضافه میشه، عملا رنگ نوشته هاش سفید هست و کار نمیکنه که این به دلیل زیاد شدن آدرس پروژه هست، برای همین بهتر هست همیشه توی پوشه روت درایو هاتون پروژه ها رو بسازید یا حداقل درون یک پوشه درون پوشه روت درایو هاتون ایجاد کنید. من بعد از ساخت پروژه اون رو کات کردم توی درایو G پوشه Sources در کامپیوترم که این مشکل پیش نیاد.) در پنجره بعدی همانند تصویر عمل کنید، یعنی Template از نوع Blank App و UI technology از نوع Xamarin.Forms و Code Sharing strategy از نوع Shared باشه. سپس روی OK کلیک کنید، بعد از این از شما می خواد برای پروژه UWP نسخه SDK تعریف کنید که من 14393 که نسخه سالگرد هست رو انتخاب کردم. پس از ساخت پروژه، پنجره هایی که مربوط به IOS باز شدن رو ببندید. نکته: اگه با ناگت مشکل دارید، یعنی نمی توانید کتابخانه دانلود کنید، نرم افزار Fiddler4 رو دانلود و نصب کنید. پس از نصب آنرا باز کنید و روی WinConfig کلیک کنید، چنانچه از شما پیاپی سوال پرسیده شد، روی YES کلیک کنید تا پنجره ی دیگری برایتان باز شود. در پنجره باز شده روی Exempt all کلیک کنید و روی Save changes کلیک کنید و این پنجره را ببنید. از این پس هر زمانی که میخواهید از ناگت پکیج منیجر استفاده کنید، فقط برنامه Fiddler4 رو باز کنید. روی راه حل (Solution) راست کلیک کنید و روی Manage Nuget Packages for solution را انتخاب کنید. به تب Updates برید و در ابتدا Xamarin.Forms را بروز رسانی کنید، گزینه Xamarin.Forms را تیک بزنید و روی Update کلیک کنید. چنانچه بعد از نصب این قسمت زرد رنگ را دیدید روی Restart کلیک کنید تا ویژوال استودیو ریستارت شود. بعد از ریستارت بصورت خودکار پروژه شما بارگذاری خواهد شد. پس از باز شدن، دوباره به Nuget package manager را باز کنید و در تب Updates همه ی گزینه ها را تیک بزنید و روی Update کلیک کنید تا باقی کتابخانه ها هم بروز رسانی شوند. حال با تب Browse بروید و در قسمت Search این متن را تایپ کنید و اینتر بزنید: sqlite-net-pcl نکته: نسخه های متفاوتی از Sqlite در ناگت وجود دارد اما ما فقط و فقط این نسخه را می خواهیم: این کتابخانه را نصب کنید. نکته: این نسخه توسط Frank a Krueger ساخته شده و تنها نسخه ای هست که اندروید 7 به بالا بدون باگ اجرا میشود. نکته: حتما چک کنید و ببینید که این کتابخانه ها (SQLitePCLRaw) هم خودکار با این پکیج نصب شده باشند، اگر نصب نبودند حتما آنها را خودتان نصب کنیدالبته این عکس مربوط به References پروژه اندروید است. در UWP اینطوری نیست.) حال وقت آن است که دیتابیس را به پروژه اضافه کنیم، من از دیتابیسی که قبلا درون آموزش ساخت کتاب برای ویندوزفون 8.1 ساخته بودم اینجا استفاده کردم. کپی کردن دیتابیس در پروژه UWP. دیتابیس را درون روت پروژه UWP کپی کنید سپس روی آن راست کلیک کرده و روی Properties کلیک کنید. Build Action را روی Content قرار دهید و گزینه Copy to output directory را Copy Always قرار دهید کپی کردن دیتابیس درون پروژه IOS برای اضافه کردن فایل، باید آنها را در پوشه Resources پروژه IOS اضافه کنید. روی دیتابیس راست کلیک کنید و روی Properties کلیک کنید. حتما بررسی کنید که Build Action روی BundleResource و Copy to output روی Copy Always باشد: کپی کردن دیتابیس در پروژه Android در اندروید اضافه کردن فایل به پروژه بسیار جالب است. برای اضافه کردن فایل، ابتدا پوشه ای به نام Raw درون پوشه Resources ایجاد کنید و دیتابیس را درون آن اضافه کنید. روی دیتابیس راست کلیک کرده و Properties را انتخاب کنید و گزینه Build Action را روی AndroidResource و گزینه Copy to output را روی Copy Always قرار دهید. حالا چرا جالبه؟ الان بعد از اضافه کردن فایل به پوشه Raw که ایجاد کردیم، درون پروژه اندروید یک کلاس ایجاد به همین نام ایجاد شد و یک آیدی(شناسه) از نوع Integer برای این فایل ایجاد شد. مثلا برای دسترسی به این فایل درون پروژه اندروید بدین صورت عمل می کنیم: Resources.Raw.myBookDatabase حال شاید برایتان سوال پیش آید که چگونه قرار است این فایل ها را بخوانیم؟! ما باید در پروژه Shared یک اینترفیس interface ایجاد کنید و در هر پروژه به صورت جداگانه دیتابیس را بخوانیم. اینکار را ساخت Dependency می گویند. خب درون پروژه Shared ( پروژه اول درون Solution)، یک کلاس به نام IDatabaseService ایجاد نمایید: فضای نامی SQlite را به قسمت مربوطه اضافه کنید: using SQLite; خب حالا در تعریف کلاس، به جای کلمه class کلمه public interface را بنویسید. الان کدهای زیر را بنویسید: public interface IDatabaseService { SQLiteConnection GetConnection(string fileName); void CopyDatabaseToLocal(string fileName); } خب برای اونهایی که تا حالا با اینترفیس ها کار نکردن، ما اینجا یک تابع بازگشتی به نام GetConnection تعریف کردیم که SQLiteConnection رو باز گردانی خواهد کرد. تابع بعدی، تابع کپی کردن دیتابیس خواهد بود. ما در هر سه پروژه پلتفرم سه کلاس ایجاد خواهیم کرد که از این اینترفیس مشتق میشود. یک کلاس دیگر درون پروژه Shared به نام Extensions ایجاد کنید. این کلاس به صورت static خواهد بود و در واقع یک نوع Extension نویسی برای Exception ها است که قرار است ایجاد کنیم: static class Extensions { public static string Exception(this Exception ex, string starts) { var content = $"{starts} ex: {ex.Message}\r\nSource: {ex.Source}" + $"\r\nTrace: {ex.StackTrace}"; Output(content); return content; } public static void Output(object obj) { System.Diagnostics.Debug.WriteLine(Convert.ToString(obj)); } } تابع اول یک Extension است، تابع را در یک Exception که در try...catch قرار دارد فرا بخوانیم، اگر کد ما استثنا داد، خطا را در پنجره Output ویژوال نمایش خواهد داد(فقط در حالتی که پروژه روی Debug باشد.) خب در پروژه UWP یک کلاس به نام DatabaseService_UWP ایجاد کنید. فضاهای نامی زیر را به قسمت مربوطه اضافه کنید: using System; using SQLite; using Windows.Storage; using System.IO; using Xamarin.Forms; using Windows.ApplicationModel; حالا کلاس اینترفیس را مشتق کلاسی که ایجاد کردید قرار دهید، چنانچه موس را روی IDatabaseService ببرید و روی آن کلیک کنید یک مثلث زیر آن خواهد آمد که خودکار برای شما توابعی که در اینترفیس ایجاد کردیم را برای شما در این کلاس می سازد: تکه کد زیر را پاک کنید: throw new NotImplementedException(); حال کدهای زیر را درون تابع CopyDatabaseToLocal بنویسید: public async void CopyDatabaseToLocal(string fileName) { try { StorageFile storageFile = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName); // injori faghat yebar file ro copy mikonim tuye local folder storageFile = null; return; } catch { } StorageFile databaseFile = await Package.Current.InstalledLocation.GetFileAsync(fileName); await databaseFile.CopyAsync(ApplicationData.Current.LocalFolder); } دیتابیس درون پروژه را به LocalFolder کپی می کنیم. نکته: درون try...catch خط آخر return نوشتیم، اینطوری زمانی که هر بار برنامه باز می شود، اگر فایل دیتابیس درون LocalFolder موجود بود، آنرا کپی نخواهد کرد. این کار برای زمانی است که کاربر بخواهد دیتابیس را بروز رسانی کند و یا آیتمی به آن اضافه کند، اینطوری دیتابیس هر بار ریست نخواهد شد. حال تابع بازگشتی GetConnection را بنویسید: public SQLiteConnection GetConnection(string fileName) { try { var path = Path.Combine(ApplicationData.Current.LocalFolder.Path, fileName); var connection = new SQLiteConnection(path); return connection; } catch (Exception ex) { ex.Exception("DatabaseService_UWP"); } return null; } این تابع کانکشنی به دیتابیس باز می کند که ما بعد از متصل شدن، می توانیم آیتم ها را دریافت کنیم یا اینکه آنها را ویرایش و یا حذف کنیم. خب الان باید تعیین کنیم که این کلاس یک Dependency می باشد. برای اینکار، بالای فضای نامی کد زیر را بنویسید: [assembly: Dependency(typeof(WN_XF_Database.UWP.DatabaseService_UWP))] یعنی اینطوری: [assembly: Dependency(typeof(WN_XF_Database.UWP.DatabaseService_UWP))] namespace WN_XF_Database.UWP { public class DatabaseService_UWP : IDatabaseService حال درون پروژه IOS نیز یک کلاس به نام DatabaseService_IOS ایجاد نمایید. فضاهای نامی زیر را به قسمت مربوطه ی آن اضافه کنید: using SQLite; using System; using System.IO; using Xamarin.Forms; و کلاس آن: [assembly: Dependency(typeof(WN_XF_Database.iOS.DatabaseService_IOS))] namespace WN_XF_Database.iOS { public class DatabaseService_IOS :IDatabaseService { public SQLiteConnection GetConnection(string fileName) { try { var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var libraryPath = Path.Combine(documentsPath, "..", "Library"); var path = Path.Combine(libraryPath, fileName); var connection = new SQLiteConnection(path); return connection; } catch (Exception ex) { ex.Exception("DatabaseService_IOS"); } return null; } public void CopyDatabaseToLocal(string fileName) { try { var documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var libraryPath = Path.Combine(documentsPath, "..", "Library"); var path = Path.Combine(libraryPath, fileName); if (!File.Exists(path)) { // daryafte db az masire nasb shodeye barname using (var sourceStream = File.Open("./" + fileName, FileMode.Open, FileAccess.Read)) { FileStream writeStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); ReadWriteStream(sourceStream, writeStream); } } } catch (Exception ex) { ex.Exception("DatabaseService_IOS.CopyDatabaseToLocal"); } } private void ReadWriteStream(Stream readStream, Stream writeStream) { try { int Length = 256; Byte[] buffer = new Byte[Length]; int bytesRead = readStream.Read(buffer, 0, Length); while (bytesRead > 0) { writeStream.Write(buffer, 0, bytesRead); bytesRead = readStream.Read(buffer, 0, Length); } readStream.Close(); writeStream.Close(); } catch (Exception ex) { ex.Exception("DatabaseService_IOS.ReadWriteStream"); } } } } خب کپی کردن دیتابیس از پوشه ی نصبی برنامه پوشه MyDocuments کمی در IOS و اندروید نسبت به UWP فرق داره، همانطور که در بالا می بینید یک تابع private هم برای کپی کردن آن نوشتیم. در پروژه اندروید هم کلاسی به نام DatabaseService_Android ایجاد نمایید. فضاهای نامی مورد نیاز: using SQLite; using System; using System.IO; using System.Threading.Tasks; using Xamarin.Forms; کلاس مورد نظر: [assembly: Dependency(typeof(WN_XF_Database.Droid.DatabaseService_Android))] namespace WN_XF_Database.Droid { public class DatabaseService_Android : IDatabaseService { public SQLiteConnection GetConnection(string fileName) { try { var documentspath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var path = Path.Combine(documentspath, fileName); var connection = new SQLiteConnection(path); return connection; } catch (Exception ex) { ex.Exception("DatabaseService_Android"); } return null; } public async void CopyDatabaseToLocal(string fileName) { try { var documentspath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var path = Path.Combine(documentspath, fileName); if (!File.Exists(path)) { var s = Android.App.Application.Context.Resources.OpenRawResource(Resource.Raw.myBookDatabase); FileStream writeStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write); ReadWriteStream(s, writeStream); } await Task.Delay(1); } catch (Exception ex) { ex.Exception("DatabaseService_Android.CopyDatabaseToLocal"); } } private void ReadWriteStream(Stream readStream, Stream writeStream) { try { int Length = 256; Byte[] buffer = new Byte[Length]; int bytesRead = readStream.Read(buffer, 0, Length); while (bytesRead > 0) { writeStream.Write(buffer, 0, bytesRead); bytesRead = readStream.Read(buffer, 0, Length); } readStream.Close(); writeStream.Close(); } catch (Exception ex) { ex.Exception("DatabaseService_Android.ReadWriteStream"); } } } } خب حالا کلاس ها را ذخیره کنید و همه ی آنها را ببندید. در پروژه Shared یک کلاس به نام Dastan ایجاد کنید. این کلاس در اصل مدل دیتابیسی که من در SQLite ساختم، می باشد. فضای نامی مورد نیاز: using SQLite; کلاس داستان: public class Dastan { [PrimaryKey, AutoIncrement] public int Id { get; set; } public string Name { get; set; } public string Story { get; set; } public override string ToString() { return Name.ToString(); } } جدول من دارای سه ستون می باشد. Id برای شناسه، Name برای نام داستان و Story برای متن داستان. کلاس App.xaml.cs را باز کنید. رشته زیر را به صورت constant ایجاد کنید. این رشته نام فایل دیتابیس ما می باشد. چرا constant؟ زیرا نمی خواهیم به اشتباه آنرا تغییر دهیم. (این مقدار فقط readonly یعنی "فقط خواندنی" در نظر گرفته میشود.) public const string DBName = "myBookDatabase.db3"; خب تابع CopyDb را در این کلاس بنویسید: private void CopyDb() { try { DependencyService.Get<IDatabaseService>().CopyDatabaseToLocal(DBName); } catch (Exception ex) { ex.Exception("App.CopyDb"); } } خب این کد شاید برای شما کمی عجیب باشد! اما اینجا فلسفه ساخت Interface و Dependency را یاد خواهید گرفت. کار تابع Get در DependencyService اینه که یک مقدار از نوع T میگیره(T می تونه هر کلاسی باشه) و با در پلتفرم های مختلف کدی که ما ایجاد کردیم رو صدا میزنه. برای مثال اگر ما پروژه UWP را Deploy کنیم، زمانی که به این کد میرسه، DependencyService میاد interfaceـی که ما به نام IDatabaseService ساختیم رو صدا میزنه، این اینترفیس بصورت عادی هیچی نیست اما چون ما کلاس هایی در سه پلتفرم ایجاد کردیم که هم از این اینترفیس مشتق شده بودند و هم به عنوان Dependency اون ها تعریف کرده بودیم، میاد برای هر پروژه اون کلاس مورد نظر در پلتفرم مورد نظر رو صدا میزنه. که در اینجا تابع CopyDatabaseToLocal را فرا میخونه و کار Copy کردن دیتابیس از فولدر نصب شده برنامه به پوشه MyDocuments رو انجام میده. به عبارتی Dependency بصورت خودکار هنگام اجرای این کد میاد اون کدی که ما در پروژه پلتفرمی خاص ایجاد کردیم رو پیدا می کنه و اون رو فرا می خونه. خب حالا درون constructorـه App بعد از فرا خوانیِ InitializeComponent کد زیر را قرار دهید: CopyDb(); یعنی: public App () { InitializeComponent(); CopyDb(); حالا خط بعدی یعنی MainPage =... را به صورت زیر بنویسید: MainPage = new NavigationPage(new MainPage()); چرا NavigationPage؟ زیرا می خواهیم صفحه های جداگانه بسازیم و آنها را باز کنیم. این کلاس را ذخیره کرده و آنرا ببندید. کلاس دیگر در پروژه Shared به نام DatabaseHelper ایجاد نمایید. فضاهای مورد نیاز: using SQLite; using System; using System.Collections.Generic; using System.Linq; using Xamarin.Forms; کلاس مورد نظر: public class DatabaseHelper { SQLiteConnection con; public DatabaseHelper() { try { con = DependencyService.Get<IDatabaseService>().GetConnection(App.DBName); } catch (Exception ex) { ex.Exception("DatabaseHelper"); } } /// <summary> /// Gereftane kole database be sorate liste /// </summary> /// <returns>Liste db ro barmigardone</returns> public IEnumerable<Dastan> Items() { return (from t in con.Table<Dastan>() select t).ToList(); } /// <summary> /// Gereftane yek dastan /// </summary> /// <param name="id">id e dastane morede nazar</param> /// <returns>dastan ro barmigardone</returns> public Dastan GetItem(int id) { return con.Table<Dastan>().FirstOrDefault(t => t.Id == id); } /// <summary> /// Hazfe yek dastan /// </summary> /// <param name="id">id e dastan</param> public void DeleteItem(int id) { con.Delete<Dastan>(id); } /// <summary> /// Ezafe kardane dastan /// </summary> /// <param name="dastan">dastan</param> public void AddItem(Dastan dastan) { con.Insert(dastan); } /// <summary> /// Beroz rasanie dastan /// </summary> /// <param name="dastan">dastan</param> public void UpdateItem(Dastan dastan) { con.Update(dastan); } } فکر نکنم کدها گنگ باشن. فقط در constructor اومدیم با استفاده از DependencyService تابع GetConnection رو صدا زدیم تا SQLiteConnection فرا خوانده بشه. حال کلاس را ذخیره کرده و آنرا ببندید. صفحه طراحی MainPage را باز نمایید و کدهای زیر را بنویسید: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" xmlns:local="clr-namespace:WN_XF_Database" x:Class="WN_XF_Database.MainPage" Title="WN Db Sample"> <StackLayout> <Label Text="Name" Margin="2"/> <Entry x:Name="txtName" Placeholder="Enter story name"/> <Label Text="Story" Margin="2"/> <Editor x:Name="txtStory" HeightRequest="300"/> <Button x:Name="btnAdd" Text="Add" Clicked="btnAdd_Clicked"/> <Button x:Name="btnShow" Text="Show items" Clicked="btnShow_Clicked"/> </StackLayout> </ContentPage> صفحه را ذخیره کنید، سپس قسمت کدنویسی این صفحه را باز کنید و کدهای دو تابع رویدادهای آن را بنویسید: private void btnAdd_Clicked(object sender, EventArgs e) { var dastan = new Dastan(); var db = new DatabaseHelper(); dastan.Name = txtName.Text; dastan.Story = txtStory.Text; db.AddItem(dastan); } private void btnShow_Clicked(object sender, EventArgs e) { Navigation.PushModalAsync(new StoriesPage()); } تابع رویداد btnAdd_Clicked برای اضافه کردن داستان جدید به دیتابیس است. تابع btnShow_Clicked هم برای باز کردن صفحه ی داستان ها می باشد. StoriesPage صفحه ی ما برای نمایش عناوین داستان ها می باشد. برای ایجاد صفحه ی جدید، روی پروژه Shared راست کلیک کنید و گزینه Add new item را انتخاب کنید. در پنجره ی باز شده، Content Page را انتخاب کنید و نام آنرا StoriesPage قرار دهید. نکته: دو نوع ContentPage وجود دارد، یکی به اسم ContentPage و دیگری به نام ContentPage C# می باشد. نوع اول را انتخاب کنید(اسم بدون C#): کدهای XAML این صفحه را بیاورید و کدهای زیر را درون آن بنویسید: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="WN_XF_Database.StoriesPage" Title="Stories"> <ListView x:Name="StoryListView" SeparatorVisibility="Default"> <ListView.ItemTemplate> <DataTemplate> <ViewCell> <Grid HeightRequest="60"> <Grid.GestureRecognizers> <TapGestureRecognizer x:Name="ItemTap" Tapped="ItemTap_Tapped" NumberOfTapsRequired="1"/> </Grid.GestureRecognizers> <Label Text="{Binding Name}" TextColor="Black" VerticalOptions="CenterAndExpand" HorizontalOptions="End" Margin="5"/> </Grid> </ViewCell> </DataTemplate> </ListView.ItemTemplate> </ListView> </ContentPage> صفحه را ذخیره کرده و صفحه کدنویسی آنرا باز کنید. فضاهای نامی مورد نیاز: using System; using System.Linq; using Xamarin.Forms; using Xamarin.Forms.Xaml; تابع بازنویسی شده OnAppearing را بنویسید. این تابع در اصل همان تابع Loaded در پروژه های یونیورسال میباشد! protected override void OnAppearing() { base.OnAppearing(); var db = new DatabaseHelper(); var list = db.Items(); Extensions.Output("Story count: " + list.Count()); StoryListView.ItemsSource = list; } آیتم های دیتابیس را به ItemsSourceـه ListView بایند می کنیم. تابع Tapped را برای آیتم ها می نویسیم: private void ItemTap_Tapped(object sender, EventArgs e) { try { var grid = sender as Grid; if (grid == null) return; var dastan = grid.BindingContext as Dastan; if (dastan == null) return; Navigation.PushModalAsync(new ShowStoryPage(dastan)); } catch (Exception ex) { ex.Exception("ItemTapped"); } } چون ما این تابع را برای Grid ساختیم پس sender را Cast می کنیم به Grid سپس BindingContext یا همان مدل بایندینگ را از نوع داستان Cast می کنیم. در آخر صفحه ShowStoryPage را باز می کنیم و اطلاعات را درون Constructor آن میفرستیم. صفحه ای جدید از نوع Content Page درون پروژه Shared ایجاد کنید و نام آنرا ShowStoryPage بگذارید. درون قسمت طراحی این صفحه کدهای زیر را بنویسید: <?xml version="1.0" encoding="utf-8" ?> <ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="WN_XF_Database.ShowStoryPage" Title="Show story"> <ContentPage.Content> <StackLayout> <Label x:Name="txtName" TextColor="Black" HorizontalOptions="End" Font="15" Margin="5"/> <ScrollView> <Label x:Name="txtStory" TextColor="Black" HorizontalOptions="End" HorizontalTextAlignment="End" Margin="10"/> </ScrollView> </StackLayout> </ContentPage.Content> </ContentPage> صفحه را ذخیره کرده و قسمت کدنویسی آنرا باز کنید. در بالای constructor خط زیر را بنویسید: public Dastan CurrentDastan; یک کپی از تابع constructor بگیرید و یک پارامتر ورودی از نوع Dastan به آن اضافه کنید. یعنی: public ShowStoryPage () { InitializeComponent (); } public ShowStoryPage(Dastan dastan) { InitializeComponent(); CurrentDastan = dastan; } حال تابع بازنویسی شده OnAppearing را بنویسید تا اطلاعاتی که بارگذاری شده، را به تکست ها اضافه کنیم: protected override void OnAppearing() { base.OnAppearing(); if (CurrentDastan != null) { txtName.Text = CurrentDastan.Name; txtStory.Text = CurrentDastan.Story; } } به همین راحتی! دانلود سورس کد نمونه منبع: وین نویس
  15. سلام.تقاضا میشه از دوستانی که زامارین اندروید بلد هستن لطف کنن اموزش sqlite در زامارین بزارن، که شامل ثبت،حذف،بروزرسانی باشه.ممنون
  16. سلام " برای نصب visual studio 2017 این ارور ها رو به من میده ، با vpn هم امتحان کردم ولی درست نشد ، بنظر شما مشکل از کجا هست ؟؟ این log Something went wrong with the install. You can troubleshoot the package failures by: 1. Search for solutions using the search URL below for each package failure 2. Modify your selections for the affected workloads or components and then retry the installation 3. Remove the product from your machine and then install again If the issue has already been reported on the Developer Community, you can find solutions or workarounds there. If the issue has not been reported, we encourage you to create a new issue so that other developers will be able to find solutions or workarounds. You can create a new issue from within the Visual Studio Installer in the upper-right hand corner using the "Provide feedback" button. ================================================================================ Package 'Microsoft.Net.4.6.FullRedist.NonThreshold,version=4.6.81.9' failed to install. Search URL https://aka.ms/VSSetupErrorReports?q=PackageId=Microsoft.Net.4.6.FullRedist.NonThreshold;PackageAction=Install;ReturnCode=-2146498529 Details Command executed: "C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.Net.4.6.FullRedist.NonThreshold,version=4.6.81.9\dotNetFxLatest-x86-x64-AllOS-ENU.exe" /q /norestart /KeepAUPaused /ChainingPackage Visual_Studio_15_Setup /CEIPconsent /log "C:\Users\User\AppData\Local\Temp\dd_setup_20170906133231_001_Microsoft.Net.4.6.FullRedist.NonThreshold.log" Return code: -2146498529 Return code details: Unknown error (0x800f081f) Log C:\Users\User\AppData\Local\Temp\dd_setup_20170906133231_001_Microsoft.Net.4.6.FullRedist.NonThreshold.log Impacted workloads .NET Core cross-platform development (Microsoft.VisualStudio.Workload.NetCoreTools,version=15.0.26720.2) .NET desktop development (Microsoft.VisualStudio.Workload.ManagedDesktop,version=15.0.26606.0) ASP.NET and web development (Microsoft.VisualStudio.Workload.NetWeb,version=15.0.26724.1) Visual Studio core editor (Microsoft.VisualStudio.Workload.CoreEditor,version=15.0.26606.0) Impacted components Live Unit Testing (Microsoft.VisualStudio.Component.LiveUnitTesting,version=15.0.26720.2) Visual Studio core editor (Microsoft.VisualStudio.Component.CoreEditor,version=15.0.26606.0) og
  17. مشکل حل شد . اومدم رو وی پی اس دیتابیس ساختم با ریموت بهش وصل شدم و خود انتیتی فرمورک رو مستقیم بهش وصل کردم حل شد
  18. Apiای کوچیکی که من ساختم با استفاده از Asp.Net Mvc Web Api بود. اینم آموزش ساختش: توی فایل WebApiConfig تابع Register کدهای زیر را اضافه کنید: config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data")); config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data")); config.Formatters.XmlFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data")); کلاس مورد نیاز : using System.Collections.Generic; using System.Linq; using System.Web.Http; namespace SoorenaSiteApi.Models.Helpers { public static class HeaderHelper { public static string GetHeader(ApiController controller, string key) { try { IEnumerable<string> headerValues; if (controller.Request.Headers.TryGetValues(key, out headerValues)) return headerValues.FirstOrDefault(); } catch { } return string.Empty; } } } کد کنترلر ویت: using Newtonsoft.Json; using SoorenaSiteApi.Models.Helpers; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Threading.Tasks; using System.Web.Http; namespace SoorenaSiteApi.Controllers { public class WitController : ApiController { const string defaultAccessToken = "3PLCUPJISQTSUUAV3YLXFY3D3365MUTY"; string accessToken = string.Empty; string audioType = string.Empty; [HttpPost, Route("api/wit")] public async Task<object> Upload() { if (!Request.Content.IsMimeMultipartContent()) return new WitResponseObject { Text = "UnsupportedMediaType" }; //throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); accessToken = HeaderHelper.GetHeader(this, "Authorization"); audioType = HeaderHelper.GetHeader(this, "AudioType"); var provider = new MultipartMemoryStreamProvider(); await Request.Content.ReadAsMultipartAsync(provider); WitResponseList list = new WitResponseList(); foreach (var file in provider.Contents) { var filename = file.Headers.ContentDisposition.FileName.Trim('\"'); var buffer = await file.ReadAsByteArrayAsync(); if (string.IsNullOrEmpty(audioType)) audioType = GetType(filename); var wit = await GetCL(buffer, audioType); list.Add(wit); } if (list.Any()) return list; return new WitResponseObject { Text = "ERR" }; } async Task<WitResponseObject> GetCL(byte[] buffer, string audioType) { using (HttpClient client = new HttpClient()) { //$ curl -XPOST 'https://api.wit.ai/speech?v=20160526' \ // -i -L \ // -H "Authorization: Bearer $TOKEN" \ // -H "Content-Type: audio/wav" \ // --data-binary "@sample.wav" // addresse sende stream be wit Uri targetUri = new Uri("https://api.wit.ai/speech?v=20160526"); Dictionary<string, string> headers = new Dictionary<string, string>(); headers.Add("Transfer-encoding", "chunked"); if (string.IsNullOrEmpty(accessToken)) headers.Add("Authorization", "Bearer " + defaultAccessToken); else headers.Add("Authorization", "Bearer " + accessToken); foreach (var item in headers) client.DefaultRequestHeaders.Add(item.Key, item.Value); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(audioType)); using (ByteArrayContent byteContent = new ByteArrayContent(buffer)) { byteContent.Headers.ContentType = new MediaTypeHeaderValue(audioType); HttpResponseMessage response = await client.PostAsync(targetUri, byteContent); var content = new StreamReader(await response.Content.ReadAsStreamAsync()).ReadToEnd(); var wit = JsonConvert.DeserializeObject<WitResponseObject>(content); return wit; } } } string GetType(string filename) { var extension = filename.Substring(filename.LastIndexOf(".") + 1); if (extension.ToLower() == "mp3") return "audio/mpeg3"; else return "audio/wav"; } } public class WitResponseList : List<WitResponseObject> { } public class WitResponseObject { [JsonProperty("msg_id")] public string MessageId { get; set; } [JsonProperty("_text")] public string Text { get; set; } [JsonProperty("entities")] public object Entities { get; set; } } } موفق باشید. منبع: وین نویس
  19. سلام، توی تاپیک قبلی > آموزش ساخت دستیار صوتی و تشخیص گفتار صوتی رو آموزش داده بودم. اما اگه از این کد استفاده کرده باشید می دونید که در بعضی موارد جواب رو نمیده و به احتمال زیاد ف-ی=ل=ت-ر هست. خب برای رفع این مشکل من یه api کوچیک آماده کردم که شما کافیه که فایلی که رکورد کردید رو به این آدرس پست کنید: http://appsoorena.ir/api/wit نمونه کد برای ارسال: async Task<string> GetAsync(StorageFile file) { try { using (HttpClient httpClient = new HttpClient()) { MultipartFormDataContent form = new MultipartFormDataContent(); using (Stream fileStream = (await file.OpenAsync(FileAccessMode.ReadWrite)).AsStream()) { byte[] bytes = ReadStream(fileStream); form.Add(new ByteArrayContent(bytes, 0, bytes.Length), "file", file.Name); HttpResponseMessage response = await httpClient.PostAsync("http://appsoorena.ir/api/wit", form); response.EnsureSuccessStatusCode(); httpClient.Dispose(); string result = response.Content.ReadAsStringAsync().Result; return result; } } } catch (Exception ex) { Debug.WriteLine("Ex: " + ex.Message + "\r\n\r\n" + ex.Source + "\r\n\r\n" + ex.StackTrace); } return ""; } به صورت پیشفرض این میاد از AccessToken من استفاده میکنه و ارسال فایل به ویت رو انجام میده، اگه مایل هستید که از AccessToken خودتون استفاده کنید، کافیه که توی هدر ارسالی نام هدر رو Authorization بذارید و مقدار اون رو برابر با AccessToken خودتون قرار بدید: مثال: httpClient.DefaultRequestHeaders.Add("Authorization", "ACCESS TOKEN E SHOMA"); نکته: این API قابلیت ارسال همزمان چندین فایل رو داره: async Task<string> GetAsync(IReadOnlyList<StorageFile> files) { try { using (HttpClient httpClient = new HttpClient()) { //httpClient.DefaultRequestHeaders.Add("Authorization", "ACCESS TOKEN E SHOMA"); MultipartFormDataContent form = new MultipartFormDataContent(); Dictionary<string, byte[]> dic = new Dictionary<string, byte[]>(); foreach (StorageFile f in files) { using (Stream fileStream = (await f.OpenAsync(FileAccessMode.ReadWrite)).AsStream()) { byte[] bytes = ReadStream(fileStream); string name = f.Name; dic.Add(name, bytes); } } foreach (var f in dic) form.Add(new ByteArrayContent(f.Value, 0, f.Value.Length), "file", f.Key); HttpResponseMessage response = await httpClient.PostAsync("http://appsoorena.ir/api/wit", form); response.EnsureSuccessStatusCode(); httpClient.Dispose(); string result = response.Content.ReadAsStringAsync().Result; return result; } } catch (Exception ex) { Debug.WriteLine("Ex: " + ex.Message + "\r\n\r\n" + ex.Source + "\r\n\r\n" + ex.StackTrace); } return ""; } جواب به صورت لیستی از کلاس WitResponseObject خواهد بود. در اینجا من 8 فایل ارسال کردم که اینم جوابش: [ { "msg_id": "0XuSI5fNDdIXwvg2w", "_text": "برای", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } }, { "msg_id": "0jur6vqRHwR5iULOx", "_text": "دانلود", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } }, { "msg_id": "0bjs6UfOFV5RWxlA6", "_text": "این", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } }, { "msg_id": "0sPszLjV7Emx81ZFo", "_text": "کد", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } }, { "msg_id": "0VUVcyH4DwD3O2rqH", "_text": "زیر", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } }, { "msg_id": "0EqbLSnVxjoIZa3rs", "_text": "راه", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } }, { "msg_id": "0amyxK8K5g1bCqBep", "_text": "اسکن", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } }, { "msg_id": "0Joftm7K5HpGOyNFB", "_text": "کنید", "entities": { "intent": [ { "confidence": 1, "value": "کاری " } ] } } ] موفق باشید. منبع: وین نویس
  20. c#

    سلام دوباره با پافشاری های بنده و پرسیدن این سوال در انجمن های جهانی از اخر فکر کنم به نتیجه مطلوبی رسیدم بهم چند تا منبع ارائه دادن و چند تا کد اما به دلیل اینکه اطلاعات کمی در مورد uwp دارم نمی تونم از کدهای داده شده استفاده کنم. بنده تو این لینک سوالمو پرسیدم و پاسخم رو دادن .(مخصوصا جواب اخری که به نظرم کامل تر هست) ممنون میشم راهنماییم کنید.
  21. سلام لطفا آموزش استفاده از دیتابیس sqlite در زامازین فورم را قرار دهید
  22. c#

    سلام چه جوری از webview اعلانات سایت بگیرم
  23. نمیدونم واله دقیقا مراحلو همونطوری که گفتی پیش رفتم ولی با این مشکلات مواجه شدم حلم نشد که نشد.
  24. از چه روشی برای اتصال به بانک اطلاعاتی استفاده می کنید عکس خطا هم بزارید
  25. سلام خسته نباشید . دوستان من چند وقته کار با Asp.Net MVC رو شروع کردم ولی به شدت با دیتابیس مشکل دارم به طوری که همه چی روی پی سی اوکی و بدون مشکل هست زمانی که رو هاست میره پروژه به هیچ عنوان به اسکیوال سرور کانکت نمیشه و تو این چند روز دست کم 150 تا ارور کاملا متفاوت رو شاهد بودم اگه میشه یه آموزش از ساخت یه دیتابیس خیلی مبتدی در همین حد که مثلا یه نام از کاربر بگیره ثبت کنه بزارید تو انجمن از ابتدا تا جایی که پروژه رو روی هاست یا VPS میزارید و کانکشن دیتابیس رو درست کنید . هر چی سرچ کردم و هر چی تست کردم حاصل فقط ارور جدید بود مرسی اه
  26. والا از من که اصلا اپل آی دی نخواست ! فیلتر شکن هم استفاده نکردم چه کردی که اپل ای دی خواسته ازت
  27. c#

    من مشکلات سورس رو در قالب یک پروژه جدید رفع کردم . خود سورس به اندازه کافی مستند سازی کرده با این وجود شاید کد ها خیلی پیچیده به نظر برسن... توضیحات استفاده: ابتدا باید دو دستگاه که این برنامه بر روی اونا نصبه بلوتوثشون روشن باشه و قبلا با هم pair هم شده باشند. حالا برنامه رو در دو دستگاه اجرا کنید در یکی به صفحه کلاینت و دیگری به صفحه سرور رجوع کنید ، در صفحه سرور بر روی start listening کلیک کنید و در دستگاه دیگه روی start و سپس از لیست دستگاه های یافت شده ، دستگاه دیگر رو انتخاب کرده و بر روی connect to selected device کلیک کنید ، حالا که دو دستگاه به هم متصل هستند میتونید پیام به هم ارسال کنید. توجه : ظاهرا تنها کارکتر های ASCII پشتیبانی میشه بنابراین ارسال کارکتر های فارسی باعث کرش برنامه میشه... BluetoothChat.rar
  28. سلام دوست گرامی بهترین نتایج رو میتونید با یک سرچ کوچک به لاتین تو گوگل پیدا کنید چون در این زمینه کار نکردم نمیتونم زیاد راهنمایتون کنم ولی همینقدر میدونم که شما باید از api های گوگل مپ استفاده کنید فقط کافیه این عبارت رو تو گوگل سرچ کنید تا مقدار قابل توجهی منبع گیرتون بیاد:"google map api for uwp"
  1. نمایش فعالیت های بیشتر