Benutzeroberfläche eines Texteditors mit WPF

Standard

In meinem letzten Artikel habe ich einen Überblick über den Layoutmechanismus in WPF gegeben. In diesem Artikel möchte ich zeigen, wie man eine Benutzeroberfläche für einen Texteditor mit WPF layouten kann.

Ziel

In diesem Artikel möchte ich zeigen, wie man mit dem WPF-Layoutmechanismus eine GUI für einen Notepad-ähnlichen Texteditor entwerfen kann. Das Ergebnis wird in etwa so aussehen:

Texteditor Ergebnis

Oft gibt es mehr als eine Möglichkeit, ein Ziel zu erreichen. So auch hier: in der ersten Variante verwende ich ein Grid und in der zweiten Variante ein DockPanel.

Variante mit Grid

Visual Studio erstellt ein Window immer mit einem Grid:

    <Window x:Class="TextEditor.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
     
        </Grid>
    </Window>

Zuerst müssen wir die Spalten und Zeilen definieren, die das Layoutgitter haben soll, dann können wir die Steuerelemente hinzufügen und einzelnen Gitterzellen zuweisen.

    <Window x:Class="TextEditor.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition/>
                <RowDefinition/>
                <RowDefinition/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
     
            <Menu Grid.Column="0" Grid.Row="0" />
            <TextBox Grid.Column="0" Grid.Row="1" />
            <StatusBar Grid.Column="0" Grid.Row="2" />
        </Grid>
    </Window>

Wir definieren drei Zeilen und eine Spalte. Jedes Steuerelement kommt in eine eigene Zeile. Das Ergebnis sieht dann so aus:

Layout mit Grid

Wie wir sehen, sieht das Ergebnis noch gar nicht nach Texteditor aus. Drei gleich große Layoutgitterzeilen beinhalten das Menü, die TextBox und die Statuszeile.

Per Voreinstellung bekommt jede Zeile die Höhe “1*” zugewiesen, d.h. die Höhe wird im Verhältnis 1:1:1 aufgeteilt. Daher sind die drei Zeilen gleich hoch.

Wenn wir die Zeilendefinitionen so abändern, dass die erste Zeile (Menü) und die dritte Zeile (Statuszeile) eine fixe Höhe bekommen und die zweite Zeile (TextBox) den Rest bekommt, dann kommen wir dem Ziel etwas näher.

    ...
            <Grid.RowDefinitions>
                <RowDefinition Height="23"/>
                <RowDefinition Height="1*"/>
                <RowDefinition Height="26"/>
            </Grid.RowDefinitions>
    ...

Die erste Zeile setzen wir auf 23 Pixel und die letzte Zeile auf 26 Pixel. Die zweite Zeile bekommt den Rest. Die Höhenangabe für die zweite Zeile kann weggelassen werden, weil “1*” der voreingestellte Wert ist.

Dem Menü fehlen noch die Hauptmenüpunkte und die Textbox akzeptiert noch nicht die Eingabetaste. Mit folgenden Änderungen sieht unser Fenster beinahe wie ein richtiger Texteditor aus:

    <Window x:Class="TextEditor.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="23"/>
                <RowDefinition Height="1*"/>
                <RowDefinition Height="26"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
     
            <Menu Grid.Column="0" Grid.Row="0">
                <MenuItem Header="_Datei" />
                <MenuItem Header="_Bearbeiten" />
                <MenuItem Header="_Format"/>
                <MenuItem Header="_Ansicht"/>
                <MenuItem Header="_Hilfe"/>
            </Menu>
            <TextBox Grid.Column="0" Grid.Row="1" AcceptsReturn="True" />
            <StatusBar Grid.Column="0" Grid.Row="2" />
        </Grid>
    </Window>

Die WPF-TextBox zeigt mehrzeilige Texte immer mehrzeilig an, aber per Voreinstellung akzeptiert sie die Eingabetaste nicht. Mit der Eigenschaft AcceptsReturn kann dieses Verhalten geändert werden.

Wenn der Benutzer jetzt einen längeren Text in die TextBox eingibt oder einfügt, sollten Schiebeleisten erscheinen. Unser Fenster verhält sich leider noch nicht so. Wenn wir die TextBox in ein ScrollViewer-Element einbetten, erhalten wir das gewünschte Verhalten:

    <Window x:Class="TextEditor.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="23"/>
                <RowDefinition Height="1*"/>
                <RowDefinition Height="26"/>
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition/>
            </Grid.ColumnDefinitions>
     
            <Menu Grid.Column="0" Grid.Row="0">
                <MenuItem Header="_Datei" />
                <MenuItem Header="_Bearbeiten" />
                <MenuItem Header="_Format"/>
                <MenuItem Header="_Ansicht"/>
                <MenuItem Header="_Hilfe"/>
            </Menu>
            <ScrollViewer Grid.Column="0" Grid.Row="1"
                          HorizontalScrollBarVisibility="Auto"
                          VerticalScrollBarVisibility="Auto">
                <TextBox AcceptsReturn="True" />
            </ScrollViewer>
            <StatusBar Grid.Column="0" Grid.Row="2" />
        </Grid>
    </Window>

Da jetzt ScrollViewer das Kindelement des Grids ist, muss die Zuweisung zu einer Layoutgitterzelle für das ScrollViewer-Element erfolgen. Die TextBox braucht dann keine Zuweisung mehr.

Mit den Eigenschaften HorizontalScrollBarVisibility und VerticalScrollBarVisibility können wir steuern, wann die Schiebeleisten erscheinen.

Variante mit DockPanel

Das Ziel kann auch mit einem DockPanel erreicht werden. Tauschen wir mal das Grid durch ein DockPanel aus und entfernen die Zeilen- und Spaltendefinitionen und die Zuordnung zu den Layoutgitterzellen:

    <Window x:Class="TextEditor.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <DockPanel>
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="_Datei" />
                <MenuItem Header="_Bearbeiten" />
                <MenuItem Header="_Format"/>
                <MenuItem Header="_Ansicht"/>
                <MenuItem Header="_Hilfe"/>
            </Menu>
            <ScrollViewer HorizontalScrollBarVisibility="Auto"
                          VerticalScrollBarVisibility="Auto">
                <TextBox AcceptsReturn="True" />
            </ScrollViewer>
            <StatusBar DockPanel.Dock="Bottom" />
        </DockPanel>
    </Window>

Das Ergebnis sieht noch nicht so aus, wie wir wollen.

Layout mit DockPanel

Das Problem ist, dass bei einem DockPanel jenes Steuerelement, das den Rest der Fläche ausfüllen soll, als letztes angegeben werden muss. Das ist bei uns der ScrollViewer mit der TextBox. Außerdem gibt das DockPanel jedem Element gerade soviel Platz, wie es braucht, um den Inhalt darzustellen. Daher sollten wir etwas in der Statuszeile anzeigen, damit das DockPanel die Statuszeile überhaupt darstellt:

    <Window x:Class="TextEditor.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <DockPanel>
            <Menu DockPanel.Dock="Top">
                <MenuItem Header="_Datei" />
                <MenuItem Header="_Bearbeiten" />
                <MenuItem Header="_Format"/>
                <MenuItem Header="_Ansicht"/>
                <MenuItem Header="_Hilfe"/>
            </Menu>
            <StatusBar DockPanel.Dock="Bottom">
                <TextBlock Text="Col 1, Ln 1" />
            </StatusBar>
            <ScrollViewer HorizontalScrollBarVisibility="Auto"
                          VerticalScrollBarVisibility="Auto">
                <TextBox AcceptsReturn="True" />
            </ScrollViewer>
        </DockPanel>
    </Window>

Das sieht doch gleich besser aus.

Endergebnis

Zusammenfassung

Wir kamen sowohl mit dem Grid als auch mit dem DockPanel an unser Ziel. Beide Varianten haben Vor- und Nachteile.

Beim Grid mussten wir die Definitionen für die Zeilen und Spalten und an den Steuerelementen sowohl die Spalte als auch die Zeile angeben, obwohl unser Layout nur eine Spalte hatte.

Das DockPanel hatte den Nachteil, dass die Reihenfolge geändert und daher die Statuszeile im XAML-Code vor der TextBox angegeben werden musste. Außerdem mussten alle Steuerelemente einen Inhalt haben, damit sie überhaupt angezeigt wurden.

94 thoughts on “Benutzeroberfläche eines Texteditors mit WPF

  1. It’s a shame you don’t have a donate button! I’d most certainly
    donate to this fantastic blog! I suppose for now i’ll settle for bookmarking and
    adding your RSS feed to my Google account. I look forward
    to new updates and will talk about this website with my Facebook group.
    Chat soon!

  2. Hello, i read your blog occasionally and i own a similar one and i was just wondering if
    you get a lot of spam remarks? If so how do you reduce
    it, any plugin or anything you can recommend? I get so much lately
    it’s driving me insane so any support is very much appreciated.

  3. Everyone loves what you guys are up too. This sort of clever work and reporting!
    Keep up the good works guys I’ve incorporated you guys to my personal blogroll.

  4. Auto Liker, Photo Auto Liker, Autoliker, Photo Liker, Facebook Auto Liker, Status Liker, Increase Facebook Likes, Facebook Liker, Autoliker, Facebook Autoliker, Auto Like, Autoliker Facebook, Working Auto Liker, Status Auto Liker, auto liker, auto like, autolike, Fb Autoliker, autoliker, facebook auto liker

  5. ปั๊มไลค์เพจ, ปั้มไลค์แฟนเพจ, เพิ่มไลค์เพจ, ไลค์เพจ, ปั๊มไลค์เพจ facebook, เพิ่มไลค์เพจ ราคาถูก, ปั้มไลค์เพจ, ปั้มเพจ, ปั๊มไลค์เพจ, เพิ่มไลค์แฟนเพจ, ปั๊มไลค์แฟนเพจ

  6. ผู้นำด้านที่ปรึกษาการตลาดออนไลน์ของไทย เพิ่มไลค์ ปั้มไลค์แฟนเพจ รับเพิ่มไลค์แฟนเพจ เพิ่มยอดไลค์ ปั้มไลค์ ปั้มไลค์คนไทย

  7. Hi! Someone in my Facebook group shared this site with us so I came to look it over.
    I’m definitely loving the information. I’m bookmarking and
    will be tweeting this to my followers! Terrific
    blog and excellent design.

  8. I know this if off topic but I’m looking into starting
    my own blog and was wondering what all is required to get set up?
    I’m assuming having a blog like yours would cost a pretty penny?
    I’m not very web savvy so I’m not 100% positive.

    Any tips or advice would be greatly appreciated. Thanks

  9. We’re a gaggle of volunteers and opening a new scheme
    in our community. Your site offered us with useful information to work on. You have done a formidable job and our whole neighborhood can be thankful to
    you.

  10. I do trust all of the concepts you’ve presented for your post.
    They are really convincing and can certainly work.
    Still, the posts are very quick for beginners.

    May just you please extend them a bit from next time?

    Thanks for the post.

  11. Hello there, just became alert to your blog through Google, and found that it is truly informative.
    I am going to watch out for brussels. I’ll be grateful if you continue this in future.
    A lot of people will be benefited from your writing.
    Cheers!

  12. I do not even know how I ended up here, but I thought
    this post was good. I do not know who you are but definitely you are going to a famous blogger if you aren’t already 😉 Cheers!

  13. Have you ever considered about adding a little bit more than just your articles?

    I mean, what you say is valuable and all. But think of
    if you added some great pictures or video clips
    to give your posts more, “pop”! Your content
    is excellent but with pics and video clips, this blog could
    definitely be one of the most beneficial in its
    niche. Superb blog!

  14. I am not sure the place you’re getting your information, but great topic.
    I needs to spend a while studying much more or working out more.
    Thank you for great information I was looking for this info for my mission.

  15. Hi I am so excited I found your webpage, I really found you by error, while I was looking on Aol for something else, Anyhow I am here now and would just like to say thanks for a incredible post and a all round enjoyable blog (I also love the theme/design), I don’t have time to look over it all at the moment but I have saved it and also added your RSS feeds, so when I have time I will be back to read more, Please do keep up the fantastic work.

  16. Hi there, just became alert to your weblog thru Google, and found that it is really informative. I am going to watch out for brussels. I’ll be grateful should you continue this in future. A lot of people will likely be benefited from your writing. Cheers!

  17. What’s Taking place i’m new to this, I stumbled upon this I have found It absolutely useful and it has helped me out loads. I am hoping to contribute & aid other customers like its helped me. Good job.

  18. This is really interesting, You are a very professional blogger. I have joined your feed and stay up for in the hunt for extra of your great post. Also, I’ve shared your website in my social networks!

  19. You actually make it seem so easy with your presentation but I find this matter to be actually something which I think I would never understand. It seems too complicated and extremely broad for me. I’m looking forward for your next post, I will try to get the hang of it!

  20. I keep listening to the reports lecture about receiving free online grant applications so I have been looking around for the best site to get one. Could you tell me please, where could i get some?

  21. Wonderful goods from you, man. I’ve understand your stuff previous
    to and you’re just extremely excellent. I really like what you’ve acquired here, really like what
    you’re stating and the way in which you say it. You make it
    enjoyable and you still care for to keep it smart. I can’t wait to read
    far more from you. This is really a great site.

  22. Hi, i feel that i saw you visited my site so i came to return the want?.I
    am attempting to find issues to enhance my website!I suppose its ok to make use of a few of your ideas!!

  23. Its like you read my mind! You appear to know so much about this, like you wrote the book
    in it or something. I think that you could do with some pics to drive
    the message home a bit, but other than that, this is fantastic blog.
    A great read. I’ll definitely be back.

  24. Great – I should certainly pronounce, impressed with your site. I had no trouble navigating through all the tabs and related information ended up being truly easy to do to access. I recently found what I hoped for before you know it at all. Quite unusual. Is likely to appreciate it for those who add forums or something, web site theme . a tones way for your customer to communicate. Excellent task..

  25. Thanks for the a new challenge you have exposed in your blog post. One thing I’d like to comment on is that FSBO relationships are built as time passes. By presenting yourself to owners the first weekend their FSBO will be announced, prior to masses get started calling on Monday, you develop a good interconnection. By sending them tools, educational elements, free records, and forms, you become the ally. By using a personal interest in them and their predicament, you generate a solid connection that, oftentimes, pays off if the owners decide to go with a realtor they know plus trust — preferably you.

  26. Thank you a lot for sharing this with all of us you actually know what you are talking approximately! Bookmarked. Kindly also seek advice from my site =). We may have a link alternate contract among us!

  27. Its like you read my mind! You seem to know so much about this, like you wrote the book in it or something. I think that you can do with a few pics to drive the message home a bit, but instead of that, this is great blog. A fantastic read. I will certainly be back.

  28. Heya i?m for the first time here. I found this board and I find It really useful & it helped me out much. I hope to give something back and help others like you helped me.

  29. Thanks a bunch for sharing this with all of us you really know what you’re talking about! Bookmarked. Kindly also visit my website =). We could have a link exchange contract between us!

  30. Thanks , I have just been looking for information about this topic for a long time and yours is the best I have found out so far. However, what about the bottom line? Are you positive about the source?

  31. I really like your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone to do it for you? Plz answer back as I’m looking to construct my own blog and would like to find out where u got this from. thanks

  32. Hello would you mind sharing which blog platform you’re using?
    I’m going to start my own blog soon but I’m having a
    tough time making a decision between BlogEngine/Wordpress/B2evolution and Drupal.
    The reason I ask is because your layout seems different then most
    blogs and I’m looking for something unique.
    P.S My apologies for getting off-topic but I had to ask!

  33. Im based in London have worked as a secretary for more than 10 years and have an HND in Business Studies but am tired of admin work and office politics and would like to do something more creative- change careers.. . I write in my spare time and have attended an advanced writing course for the past 3 years. I like reading and would like to see if I could train to teach creative writing in further education or and English /English literature. I would also be grateful if I could get any info on what qualifications you need to be able to teach English as a first language and Basic literacy skills.. . Thanks. Any advice would be great regarding training in London..

  34. Excellent post. I was checking constantly this blog and I
    am impressed! Very useful information specially the last part :
    ) I care for such info much. I was looking for this certain info for a very long time.
    Thank you and best of luck.

  35. Youre so cool! I dont suppose Ive read anything like this before. So good to seek out any individual with some authentic ideas on this subject. realy thank you for starting this up. this web site is one thing that’s wanted on the web, somebody with a little originality. helpful job for bringing something new to the web!

  36. Thanks for the marvelous posting! I genuinely enjoyed
    reading it, you may be a great author.I will ensure that I bookmark your blog and definitely will come back from now on. I
    want to encourage one to continue your great writing, have a nice morning!

  37. ปั้มรูป, กดไลค์, เพิ่มไลค์เพจ, เพิ่มไลค์แฟนเพจ ราคาถูก, รับไลค์แฟนเพจ, ปั้มไลค์แฟนเพจ, Like Fanpage, ปั้มไลค์เฟสบุ๊ค, รับปั้มไลค์รูป, ปั้มเพจเฟสบุ๊ค, เพิ่มไลค์, จ้างเพิ่มไลค์, ปั้มไลค์สถานะ, ปั้มไลค์รูป, ปั้มไลค์ Facebook, รับเพิ่มไลค์, บริการเพิ่มไลค์เฟสบุ๊คให้แฟนเพจ, รับสร้างแฟนเพจพร้อมยอดไลค์, ซื้อไลค์แฟนเพจ, ไลค์เพจ, แฟนเพจพร้อมยอดไลค์, ไลค์แฟนเพจราคาถูก, ปั้มไลค์ครบวงจร, ปั้มไลค์ทั่วไป, รับปั้มไลค์เพจ, บริการเพิ่มไลค์แฟนเพจฟรี, ปั้มไลค์รูปเฟส, รับเพิ่มไลค์แฟนเพจเฟสบุ๊ค, ปั้มเพจ, เพิ่ม Like, ปั้มไลค์ฟรี, ปั้มโพสต์, ปั้มไลค์เพจคนไทย, กด Like, บริการปั้มไลค์ฟรี, ไลค์แฟนเพจได้สูงสุดหนึ่งล้านไลค์, ปั้มไลค์ราคาถูก, รับเพิ่ม Like Fanpage Facebook ราคาพิเศษ เหมาะสำหรับผู้ที่ต้องการเพิ่ม Like Fanpage ให้ดูเป็นความน่าเชื่อถือของร้าน, ไลค์แฟนเพจ, รับจ้างกดไลค์, ปั้มไลค์, Pump Like, กดไลค์แฟนเพจ, รับไลค์ครบวงจรทั่วไทย, รับทำเพจเฟสบุ๊ค, Auto Like, บริการเพิ่ม Like ให้แฟนเพจของคุณ โดยทีมงานระดับมืออาชีพ ในระยะเวลาอันสั้นและราคาถูก รับประกันไลค์จากคนไทย 100%, จ้างปั้มไลค์, เพิ่มไลค์เพจ ราคาถูก, ปั้ม Like ฟรี, ปั้มไลค์ง่ายๆ, รับจ้างปั้มไลค์, จ้างกดไลค์, จ้างไลค์รูป, ปั้มไลค์มือถือ, เพิ่มไลค์ฟรี, รับจ้างเพิ่มไลค์, ปั้มไลค์เพจ, เพิ่มไลค์คนไทย, จ้างไลค์, ปั้มไลค์ ในโทรศัพท์, ปั้มไลค์เพจฟรี, กดไลค์รูป, รับ Like Fanpage, โกงไลค์, ปั้มเพจ เหมาะสำหรับผู้ที่ต้องการยอดไลค์เพจเพจเยอะๆ, ไลค์แฟนเพจเฟสบุ๊ค, ปั้มยอดไลค์เป็นคนไทย 100%, ปั่นไลค์, เพิ่มไลค์แฟนเพจ, การเพิ่ม Like เป็นการเพิ่มโอกาสทางการขายสินค้าของคุณนั่นเอง ด้วยงานบริการเพิ่มไลค์แฟนเพจระดับมืออาชีพ ประสบการณ์การทำงานหลายปี, Add Like Fanpage, รับทำเพจสินค้าพร้อมยอดไลค์, Up Like Fanpage, รับเพิ่มไลค์แฟนเพจ เป็นการโปรโมทแฟนเพจ เพื่อเพิ่มยอดขายสินค้าได้, รับทำไลค์ครบวงจร, บริการปั้มไลค์แฟนเพจฟรี, ปั้มไลค์เพจ Facebook, ปั้มไลค์รูป Facebook, รับทำไลค์แฟนเพจจำนวนมาก, ไลค์คนไทย 100%

  38. Thanks , I have just been searching for information approximately this topic
    for ages and yours is the best I have came upon till now.
    However, what concerning the bottom line? Are you sure concerning the
    source?

  39. Youre so cool! I dont suppose Ive read anything like this before. So good to seek out any individual with some authentic ideas on this subject. realy thank you for starting this up. this web site is one thing that’s wanted on the web, somebody with a little originality. helpful job for bringing something new to the web!

  40. ปั้มไลค์.com เว็บบริการปั้มไลค์ สถานะ คอมเม้น รูปภาพ และระบบต่างๆอีกมากมายไม่ว่าจะเป็น เชคคนไลค์โพส โพสลงกลุ่ม ต่างๆในทีเดียว เว็บปั้มไลค์ เพิ่มไลค์ฟรี ปั๊มไลค์ เพิ่มไลค์ facebook ฟรี เพิ่มไลค์ สถานะ เพจ รูปภาพ คอมเม้น วิดีโอ ปั๊มไลค์ โกงรูปไลค์ ปั้มlike ปั้มไลค์เฟสบุ๊ค ปั๊มไลค์ สอนfacebookฟรี วิธีแฮคไลค์ โปรเฟสบุ๊ค ออโต้ไลค์ โกงไลค์ ใช้งานง่ายและฟรี

  41. I know top Blog professionals would really like your blog. You have a good head on your shoulders. You always know just what to say. I truly appreciate this page. Neat post.

  42. Descargar facebook
    I’d like to thank you for the efforts you have put in writing this site.
    I am hoping to see the same high-grade blog posts from you in the future
    as well. In fact, your creative writing abilities has inspired me to get my
    own, personal website now 😉 Descargar facebook

  43. Hi there I am so glad I found your weblog, I really
    found you by error, while I was browsing on Askjeeve for something else, Nonetheless I am here now and would just like to say many
    thanks for a incredible post and a all round interesting
    blog (I also love the theme/design), I don’t have time to read through it all at the minute but
    I have saved it and also added your RSS feeds, so when I
    have time I will be back to read a great deal more,
    Please do keep up the great work.

  44. Its such as you learn my thoughts! You appear to grasp so
    much about this, like you wrote the ebook in it or something.
    I feel that you simply could do with a few % to drive the message home a little bit,
    but other than that, that is magnificent blog. A fantastic read.
    I’ll certainly be back.

  45. Quest bars cheap fitnesstipsnew1 quest bars cheap 516999410492780544 quest bars cheap
    Hello colleagues, how is the whole thing, and what you
    want to say regarding this post, in my view its truly amazing designed for
    me. Quest bars cheap fitnesstipsnew1 quest bars cheap 516999410492780544 quest bars cheap

  46. There are some interesting points in time in this article however I don’t know if I see all of them heart to heart. There’s some validity but I will take maintain opinion till I look into it further. Good article , thanks and we would like more! Added to FeedBurner as nicely

  47. You have made some decent points there. I checked on the
    net for additional information about the issue and found most
    individuals will go along with your views on this web site.

  48. СтаніславЗа межами України – дивіться якою хочете мовою. А в нашій державі мова лиш одна офіційна – українська. Нею й мають обслуговуватись усі сфери суспільства. Тому не пишіть більше коментарі типу “Я хочу…”, “Ущимляете права…”. Існує закон, який все і регулює. І так дожилися, що закони порушують…

  49. You really make it seem really easy along with your presentation however I to
    find this matter to be really one thing which I believe I would never understand.

    It kind of feels too complicated and very huge for me.
    I am looking forward on your next put up, I’ll attempt
    to get the grasp of it!

Leave a Reply

Your email address will not be published.