آموزش ویژوال بیسیک

آموزش قدم به قدم ویژاول بیسیک 2015 از مبتدی تا پیشرفته

آموزش ویژوال بیسیک

آموزش قدم به قدم ویژاول بیسیک 2015 از مبتدی تا پیشرفته

طبقه بندی موضوعی

درس شانزدهم : آشنایی با برخی اشیاء (بخش اول)

چهارشنبه, ۱۶ فروردين ۱۳۹۶، ۰۹:۰۰ ق.ظ

درس شانزدهم : آشنایی با برخی اشیاء

16-1 مقدمه

  در ToolBox ویژوال استودیو، اشیای زیادی به صورت آماده وجود دارند که بخشی از API سیستم بوده و قابل برنامه نویسی و استفاده در کدنویسی میباشند. تا کنون با برخی از این اشیا آشنا شده ایم و آنان را به کار برده ایم. دکمه ها (Button)، لیبیل ها یا برچسب ها (Lable) و تکستباکس ها (TexBox) از جمله این موارده بودند. در این درس به معرفی تعداد بیشتری از این اشیاء میپردازیم.

16-2 لیست باکس ها (ListBox)

  از جعبه ابزار، لیست باکس را انتخاب و بر روی فرم درگ کنید. این ابزار در شکل 1-16 نشان داده شده است.

شکل 1-16

 

16-2-1 کاربرد لیست باکس

  این ابزار امکان نمایش داده به صورت لیست منظم را میدهد. با این ابزار امکان نمایش اطلاعات به صورت داینامیک در رانتایم فراهم میشود. اما قدرت این ابزار به لطف متدها و خصیصه های آن بیشتر از یک نمایش ساده ی اطلاعات است. در این درس به برخی متدهای این شی اشاره میکنیم اما برای یادگیری باقی امکانات این شی میتوانید به دایکیومنت این شی مراجعه و یا توضیحات مربوط به آن را در msdn بخوانید.

16-2-2 اضافه کردن و نمایش اطلاعات در لیست باکس در زمان دیزاین

  برای افزودن اطلاعات به لیست باکس در دیزاین تایم، دو روش وجود دارد. در روش اول فقط کافی است پس از افزودن لیست باکس، مطابق شکل 2-16، روی فلش کوچک آن کلیک کنیم و داخل کادری که باز میشود، اطلاعاتی که میخواهیم را وارد کنیم.

شکل 2-16

  در روش دوم این کار را به صورت Programmatically انجام میدهیم. یعنی کدی مینویسیم که به هنگام کامپایل برنامه اطلاعات را وارد لیست باکس کند. برای استفاده از این روش ابتدا باید یک نکته مهم و کاربردی را درک کنید. از خود بپرسید اطلاعاتی که باید در هنگامی که برنامه اجرا میشود، در لیست باکس وارد شده و نمایش داده شوند، در چه زمانی باید لیست باکس را پر کنند؟ به عبارت دیگر این اتفاقات در کدام رخداد برنامه ی ما باید روی دهند؟ پاسخ این است که در هنگام اجرای برنامه باید این اتفاق بیفتد. یعنی در زمان بارگذاری برنامه یا همان رخداد Load برنامه. پس کدی که مینویسیم را باید برای رویداد Load فرم بنویسیم. همانطور که میدانید برای این کار میتوان به سادگی دو بار روی فرم کلیک کرد تا رویداد بارگذاری برنامه ایجاد و ما به صفحه ی کدنویسی هدایت شویم.

  حال درون رویداد Load که برای برنامه ایجاد شده است، کدهای لازم برای پر کردن لیست باکس در زمان کامپایل را مینویسیم. برای این کار از متد add لیست باکس خود استفاده میکنیم. آنچه میخواهیم به لیست باکس اضافه شود، درون پرانتز ها قرار میگیرد.

ListBox.Items.Add(data)

16-2-2-1 مثال

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

  برای حل این مثال کافی است فرمی آماده و در آن یک لیست باکس قرار دهیم. شی ListBox را از ToolBar پیدا و بر روی فرم درگ کنید. حال روی فلش کوچک در بالاترین قسمت سمت راست این شی کلیک کنید و گزینه ی Edit Items را انتخاب کنید. کادری که باز میشود اطلاعات را وارد کنید. توجه کنید نام هر فرد را در یک خط مجزا وارد کنید. سپس OK را انتخاب کرده و برنامه را اجرا و تست کنید.

16-2-2-2 مثال

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

  برای حل این مثال در رویداد بارگذاری فرمی که برای مساله ی قبل ساختیم، کد زیر را اضافه میکنیم.

Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ListBox1.Items.Add("ایلیا")
        ListBox1.Items.Add("لیانا")
    End Sub
End Class


نتیجه این است که سه نام به صورت گرافیکی به لیست باکس اضافه شده اند و در زمان بارگذاری فرم، دو نام دیگر هم به این لیست اضافه میشوند.

 

16-2-3 اضافه کردن و نمایش اطلاعات در لیست باکس در Runtime

  ابتدا باید بدانید معنی Runtime چیست. رانتایم یعنی زمانی که برنامه در حال اجرا و کار است. برای مثال شما وقتی یک برنامه پخش کننده موسیقی را باز میکنید، آنچه مشاهده میکنید در زمان کامپایل پردازش شده و نتیجه نمایش داده شده است. این موارد شامل اینترفیس برنامه و برخی کاربردها و تنظیمات هستند. حال اگر موسیقی در حال پخش را فست فروارد کرده و اصطلاحا جلو بزنید، این عملیات در رانتایم انجام شده است. یعنی برنامه در حال کارکرد بوده که دستوراتی جدید به آن داده شده و در همان حین دستورات اجرا و نتیجه نمایش داده شده است. حال برای ورودی گرفتن برای لیست باکس در رانتایم چه کنیم؟ پاسخ بسیار ساده تر از آن است که فکر میکنید. برای این کار باز هم از متد add لیست باکس استفاده میکنیم که در بخش قبلی (2-2-16) توضیح داده شد. با این تفاوت که اینبار این متد در رویداد بارگذاری برنامه نوشته نمیشود. بلکه برای آن یک فراخوان ویژه مثلا کلیک کردن روی یک دکمه تعریف میکنیم. همچنین بدیهی است از آنجا که ما در هنگام کد نویسی از اطلاعاتی که باید وارد برنامه شوند مطلع نیستیم باید به جای مقدار دهی مستقیم به متد add ، یک پارامتر را به آن پاس داده و این پارامتر به نوبه خود در رانتایم ورودی میگیرد که روش این کار هم در دروس قبلی شرح داده شده است. کاربر هر ورودی که خواست وارد برنامه میکند و این اطلاعات در لیست باکس نمایش داده میشوند.

16-2-3-1 مثال

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

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

  پس باید در برنامه امکانی فراهم کنیم که کاربر بتواند اطلاعات مد نظرش را به برنامه وارد کند. برای این کار راههای زیادی وجود دارد مثل استفاده از تابع ()Input اما من در اینجا از قرار دادن یک تکست باکس و یک دکمه روی فرم استفاده کردم. یک تکستباکس و یک دکمه هم روی فرم قرار دهید. حال برای رویداد کلیک چپ دکمه باید کدی بنویسیم که وقتی برنامه اجرا شد، هرچه در تکستباکس نوشته شده است، به لیست باکس اضافه شود. برای این کار کد زیر را بنویسید:

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListBox1.Items.Add(TextBox1.Text)
    End Sub
End Class

 

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

16-2-4 برگرداندن تعداد آیتم های درون لیست باکس

  برای محاسبه ی سایز لیست باکس، از خصیصه ی Count لیست باکس استفاده میشود.

Dim sizeOfList As Integer = listBox.Items.Count

16-2-4-1 مثال

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

  کافی ست دکمه ای اضافه کنیم و برای رویداد کلیک چپ آن این لاین کد را اضافه کنیم. :

MessageBox.Show(ListBox1.Items.Count)


  همانطور که دیدید، من از تابع مسیج باکس برای نمایش تعداد استفاده کردم تا کار به ساده ترین و کد نویسی در حداقل ممکن باشد. اما شما میتوانید یک لیبل تعریف کنید و سایز لیست را پس از هر بار اضافه شدن داده به لیست باکس در این لیبل آپدیت کنید. مقدار اولیه آن را هم میتوانید به صورت گرافیکی یا در رویداد بارگذاری فرم به عدد صفر تغییر دهید .

16-2-5 حذف از لیست باکس

  برای حذف از لیست باکس، حالت های مختلفی وجود دارد. حالت اول موقعی است که مقدار داده ای که میخواهید حذف کنید را میدانید. یعنی اگر میخواهید نامی را حذف کنید میدانید این نام چیست. حالت دوم وقتی است که تنها شماره ایندکس داده مورد نظر را میدانید. برای مثال میدانید که داده مورد نظر، در پایان لیست میباشد. پس با توجه به اینکه ایندکس ها در ویژوال بیسیک از صفر شروع میشوند، و اولین عضو لیست، ایندکس شماره صفر است، پس میتوان برای بدست آوردن ایندکس آخرین عضو لیست یکی از سایز لیست کم کرد. حتی حالتی وجود دارد که میخواهید تمام لیست باکس را به یکباره تخلیه و همه چیز آن را پاک کنید. برای حالت های مختلف، متدها و تکنیک های مختلفی وجود دارد.

  1. برای حذف تمام اعضای لیست باکس، از متد ()Clear استفاده میکنیم.
  2. برای حذف بر حسب مقدار، از متد ()Remove کمک میگیریم. به این صورت که مقدار مورد نظر را در داخل پرانتز ها وارد میکنیم.
  3. برای حذف بر حسب ایندکس، از متد ()RemoveAt استفاده میکنیم. به این صورت که ایندکس مورد نظر را در داخل پرانتز ها وارد میکنیم.

16-2-5-1 مثال

  در این مثال فرمی مطابق شکل طراحی کردیم، سپس برای هر حالت یک دکمه قرار دادیم. کد زیر هم برای این برنامه استفاده شده است. همچنین یک لیبل برای نمایش تعداد اعضای لیست در هر بار تغییر قرار داده شده است. تحلیل کد با شما.

شکل 3-16

 

Public Class Form1
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If TextBox1.Text.Length > 0 Then
            ListBox1.Items.Add(TextBox1.Text)
        Else
            MessageBox.Show(".چیزی اضافه نشد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End If
        Label1.Text = "تعداد اعضای لیست باکس : " & ListBox1.Items.Count
        TextBox1.ResetText()
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ListBox1.Items.Clear()
        Label1.Text = "تعداد اعضای لیست باکس : " & ListBox1.Items.Count
    End Sub
    Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
        ListBox1.Items.Remove(TextBox1.Text)
        Label1.Text = "تعداد اعضای لیست باکس : " & ListBox1.Items.Count
    End Sub
    Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
        Try
            ListBox1.Items.RemoveAt(TextBox1.Text)
        Catch
            MessageBox.Show(".خطا در حذف با ایندکس. ورودی را چک کرده و دوباره سعی کنید", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
        Label1.Text = "تعداد اعضای لیست باکس : " & ListBox1.Items.Count
    End Sub
End Class

16-2-6 مرتب کردن لیست باکس

  برای مرتب کردن لیست باکس بر اساس حروف الفبا فقط کافی است خصیصه ی sorted لیست باکس را به true تغییر مقدار دهیم.

listBox.sorted = true

16-2-6-1 مثال

  به برنامه ی 1-5-2-16 امکان مرتب سازی داده ها را اضافه کنید.

  برای حل این مساله فقط کافی است به کد قبلی یک دکمه جدید اضافه و برای رویداد کلیک آن این کد را بنویسیم.

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
	ListBox1.Sorted = True
End Sub

بدیهی است که برای خارج کردن لیست باکس از حالت مرتب به ترتیب ورود داده باید خصیصه ی Sorted لیست باکس را برابر مقدار بولی false قرار دهیم.

16-2-7 رویداد تغییر انتخاب لیست باکس

  قدرت لیست باکس در این رویداد است. شما حتما با به اکنون متوجه شده اید که هر نام یا کلمه ای که در لیست باکس وارد میکنید، به صورت یک لیست زیر هم در لیست باکس قرار میگیرد. همچنین متوجه شده اید که میتوانید هر یک از آنها را به حالت انتخاب در بیاورید. (اگر تا کنون متوجه این حالت نشده بودید، آن را امتحان کنید) . امکان انتخاب شدن هر ریکورد در لیست باکس برای قشنگی نیست. شما با این امکان کارهای زیادی میتوانید انجام دهید. فقط قبل از هرچیز باید بدانید چطور میتوان این ویژگی را استفاده و کنترل کرد.

16-2-7-1 ایندکس انتخاب شده در لیست باکس

  برای هر لیست باکس خصیصه ای وجود دارد که ایندکس مورد انتخاب شده را نمایش میدهد. این پراپرتی یا خصیصه selectedIndex نام دارد. سینتکس آن مشابه زیر است:

ListBox.selectedIndex

  به جای ListBox نام لیست باکس خود را بگذارید.

  این خصیصه مانند خصیصه های دیگر هم مقدار حال حاضر خود را برمیگرداند و هم مقدار جدید می پذیرد. یعنی شما میتوانید به راحتی یک متغیر تعریف و مقدار آن را برابر با این خصیصه قرار دهید تا ایندکس مورد انتخاب شده در لیست باکس را به دست آورید. مثلا کدی مشابه زیر:

Dim x as integer = listBox.selectedIndex

  و لازم به ذکر است که این خصیصه از نوع عدد صحیح یا integer میباشد.

  همچنین میتوانید مقدار خصیصه را تغییر دهید تا مورد انتخاب شده در لیست باکس تغییر کند. البته توجه کنید که مقداری که به این خصیصه میدهید نباید از تعداد کل ایندکس لیست باکس فراتر رود. ایندکس را همیشه بین عدد صفر و یکی کمتر از تعداد سایز لیست باکس قرار دهید. برای مثال اگر لیست من دارای سه مورد نام است، من میتوانم بین اعداد 0، 1 و 2 یکی را انتخاب کنم. اگر خصیصه selectedindex را برابر با هر عددی غیر از اعداد مذکور مثلا هفت بگذارم با اکسپشن مواجه میشوم و اگر به خوبی برنامه را ارورهندلینگ نکرده باشم برنامه کرش میکند. پس دقت کنید مقداری که به این پراپرتی میدهید معقول باشد.

16-2-7-2 رویداد SelectedIndexChanged

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

Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged

End Sub

  همانطور که میدانید وقتی رویدادی را برای هر شی در ویژوال بیسیک فراخوانی میکنید، هرچه داخل بلاک کد تولید شده یعنی بین Private Sub و End Sub بنویسید، در زمان اجرای برنامه به هنگام اتفاق افتادن آن رویداد خاص اجرا میشود. بنابراین، هر کدی در بلاک کد فوق بنویسیم، وقتی کاربر روی یکی از موارد درون لیست باکس کلیک کرده و آن را به حالت انتخاب در بیاورد، اجرا میشود.

16-2-7-3 برگرداندن مقدار ایندکس انتخاب شده

  خصیصه ی SelectedIndex ایندکس مورد انتخاب شده را برمیگرداند. اما اگر مقدار واقعی مورد انتخاب شده در لیست باکس را بخواهیم، سراغ خصیصه ی SelectedItem میرویم.

ListBox.SelectedItem

  درست مانند پراپرتی SelectedIndex ، خصیصه ی SelectedItem هم میتواند مقدار پذیرفته و مقدار برگرداند.

16-2-7-4 مثال

  حال با اطلاعاتی که کسب کردیم، بیایید یک برنامه ی جالبتر بنویسیم. درک شما از این برنامه ی ساده بسیار مهم است. زیرا این برنامه پایه و اساس کار با لیست باکس و حتی روشهای خواندن و نمایش داده در برنامه را در پروژه های بسیار پیچیده تر برایتان روشن تر خواهد ساخت.

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

  برای این کار مطابق معمول از اینترفیس برنامه شروع میکنیم. مطابق شکل 4-16 فرمی را طراحی کنید و کدهایی زیر را وارد کنید:

شکل 16-4

Public Class Form1
    Dim telNumbers As ArrayList = New ArrayList()
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        TextBox1.Focus()
    End Sub
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        ListBox1.Items.Add(TextBox1.Text)
        telNumbers.Add(TextBox2.Text)
        TextBox1.ResetText()
        TextBox2.ResetText()
        TextBox1.Focus()
    End Sub
    Private Sub ListBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox1.SelectedIndexChanged
        Try
            TextBox1.Text = ListBox1.SelectedItem
            TextBox2.Text = telNumbers(ListBox1.SelectedIndex)
        Catch
            TextBox1.ResetText()
            TextBox2.ResetText()
        End Try
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        telNumbers.RemoveAt(ListBox1.SelectedIndex)
        ListBox1.Items.RemoveAt(ListBox1.SelectedIndex)
    End Sub
End Class

  اگر برنامه را درست پیاده سازی کرده باشید، میتوانید در تکست باکس ها نام و شماره موبایل وارد کرده و نامها را به صورت لیست در لیست باکس میبینید. با کلیک بر روی هر نام شماره تلفن آن شخص را ملاحظه خواهید کرد. برای حذف هم میتوانید یکی از نامها را انتخاب و دکمه ی حذف را فشار دهید.

  به عنوان تمرین، مثال 4-7-2-16 را برای خود تحلیل کنید.

نظرات (۲)

Coughing at gloom with hoarseness and iterative throat clearing may be caused close to postnasal drip from allergic rhinitis or sinusitisHarrois A, Huet O, Duranteau J: Alterations of mitochondrial occupation in sepsis and touchy diseaseFresh studies take highlighted an impressive dual position recompense C5a in Th17 stall evolvement effective levitra soft 20mg.
This very weight precludes the analysis of DNA in its native shape in ordinary molecular biology techniquesNotwithstanding how, there has been reduced research on the neuropsychological and behavioral effects of CpG challengesInjection of adult neurospheres induces turn for the better in a chronic archetypal of multiple sclerosisThis altering interferes with general constitutive activity of the receptor and decreases room membrane expression of the receptor cheap viagra professional 100mg. Anyway, more elaborate tools are rarely at one's fingertips to assess students manage promptlyThey will then take a framework that will succour them to organise and pull down sense of the intelligence as they peruse sometimes non-standard due to the indolence of the venturePott, like numberless of his successors, called a palsy, as it consists in a aggregate or partisan aboli- failed to realize the decisive substance of entr'acteThere is also a sensory branch to the buttocks impediment of the external auditory canal which may be bogus resulting in municipal hypoesthesia (Hitselberg gesticulation)Anyhow, if there is more than at one issue of the volume then utter the date of the reinterpretation or edition you are us­ ing order 10 mg toradol visa. Diagnostic Arthroscopy and Meniscal Repair/Meniscectomy 69 Diagnostic Arthroscopy and Meniscal Repair/Meniscectomy The portals ought to be accurately placed to visualize all aspects of the knee (FigThey may reveal behaviour identifiable with a run-of-the-mill grieving process—feloniousness, recantation or other coping mechanisms such as regressionSo, while carrying out like a light my applied tasks, I take in a friendly attitude and witter to the person yon his or her existence ­ the work the person reach-me-down to do, his or her one's own flesh and interests, and so on purchase vytorin 20mg with visa. Minuscule limb bones that role in momentarily towards stature and combinations of diminish limb bones and vertebrae therefore accomplish greatestIt tells us that resistance to insulin-stimulated glucose perceptiveness is com- mon in most patients with impaired glucose indulgence (IGT) or non-insulin- dependent diabetes mellitus (NIDDM), as luxuriously as in approximately 25% of non-obese individuals with rational glucose indulgenceDifficulty autoregulation allows CBF to leftovers constant in defiance of alterations in CPP. The mecha- nisms responsible for autoregulation induce at most recently been settled cheap kamagra effervescent 100 mg fast delivery.
This caused IASLC pathology committee to take three new subtypes of SCLC: small chamber, conflicting substantial and baby cubicle, and combined wee chamber carcinomas (Hirsch et al. 1988)Sexual task and genital sensitivity following feminization after congenital adrenal hyperplasiaA nomogram predicting this side clout has been developed and validated (Dehing-Oberije et al. 2010) buy cheap lasix 100 mg on line. For exemplar, Category 1 devices insist the least regulatory control such as dist- ometers, visual acuity charts, ophthalmic irritant lens sets, and a cor- neal radius measuring deviceIt is important to resist the tempta- tion to come IOP lowering efficacy matter in toxicity studies because of the generous sum up of confounding variables that are introduced with a toxicity reflect on fashion and because supra-therapeutic sedate 234 Paul EEdward DP, Bouhenni R (2011) Anterior split alterations and comparative aqueous humor proteomics in the buphthalmic rabbit (an American Ophthalmological Sodality the- sis) generic levitra 20 mg online. Interestingly, tenable differences in responsiveness to chemotherapy are birth to emerge, for warning, from a fresh research in patients with myxoid liposarcoma that demonstrated an unusually high response rebuke to trabectedin (ecteinascidin-743), an antitumour proxy extracted from the seagoing tunicate (sometimes known as unichordates or drink squirts) Ecteinascidia turbinata, which like brostallicin appears to ordinance as a DNA lass groove-binding agentThe administer that is needed to eradicate clinically inapparent disease in adjacent nodes, or in nodal areas in exemption after chemotherapy, is less than that required for greatly enlarged nodes and bulky growth massesTreatment includes training around the clutter and its treatment, family assis- tance in compliance with medications and appointments, and maintaining of structured daily activitiesNurses who did not smoke, were physically active, maintained a BMI of purchase 160 mg kamagra super overnight delivery. He was elected 28, 1940 he ?ew to South Carolina and, with to Phi Beta KappaEffective, composed if not curative, medical and surgical therapies at this very moment remain throughout many people with impaired mobility, including late-model affliction medications and mutual replace- ment surgery also in behalf of arthritisDuring treatment as a remedy for her cancer, she took commodious run from work, and when she returned, her chief told Garrett that she had been transferred to a lower-paying job as a attend manager buy generic erectafil 20 mg online.
CHAPTER FOUR An Alternative Dummy of Healing While I include shown that there are vastly authentic problems in conceptualizing alternative healing residually close to distinguishing it from biomedical treatment, surplus means of meaning proved really stock total the people who participated in this inspectionIn fact, this march of the effectiveness of methadone has been achieved on touching the object postsThe radioactive isotope can then be traced from the ventricular arrangement, sometimes non-standard due to the shunt tool, and into the distal aggregation localeAnother test is to look with a view prematurely fatigue while sustaining a plane anteverted position of the arms discount zithromax 500 mg without prescription.

باسلام و خسته نباشید

مثل مابقیه آموزش ها عااالی بود.

لطفا ادامه آموزش هارو هم بذارید.

سپاس بیکران