示例#1
0
            public void Main()
            {
                Button b1 = new Button(DarkTheme.ControlDefaultBackground, 10, 10, 100, 75, "hell0");
                Button b2 = new Button(DarkTheme.ControlDefaultBackground, 120, 10, 250, 75, "a btn");
                Button b3 = new Button(DarkTheme.ControlDefaultBackground, 10, 95, 360, 100, "another btn xddd");

                b1.Clicked += B1_Clicked;
                b2.Clicked += B1_Clicked;
                b3.Clicked += B1_Clicked;

                Listbox lb = new Listbox(DarkTheme.ContainerBackgroundColour, 10, 215, 400, 500);

                lb.AddItem(new ListboxItem(DarkTheme.ControlDefaultBackground, "listbox1"));
                lb.AddItem(new ListboxItem(DarkTheme.ControlDefaultBackground, "listbox2"));
                lb.AddItem(new ListboxItem(DarkTheme.ControlDefaultBackground, "listbox3"));
                lb.AddItem(new ListboxItem(DarkTheme.ControlDefaultBackground, "listbox4"));
                listboxes.Add(lb);

                buttons.Add(b1);
                buttons.Add(b2);
                buttons.Add(b3);

                GameEngine ge = new GameEngine(this);

                ge.Construct(1280, 720, 1, 1, 60);
                ge.Start();
            }
示例#2
0
        static Listbox LoadListbox(Stream fs)
        {
            var obj = new Listbox(ReadString(fs), ReadFont(fs), ReadInt(fs), ReadInt(fs), ReadInt(fs), ReadInt(fs), ReadBool(fs), ReadBool(fs), ReadSize(fs))
            {
                Enabled           = ReadBool(fs),
                Visible           = ReadBool(fs),
                BackColor         = ReadColor(fs),
                MinimumLineHeight = ReadInt(fs),
                SelectedBackColor = ReadColor(fs),
                SelectedTextColor = ReadColor(fs),
                ZebraStripe       = ReadBool(fs),
                ZebraStripeColor  = ReadColor(fs)
            };

            var len = ReadInt(fs);

            for (var i = 0; i < len; i++)
            {
                if (fs.ReadByte() != 7)
                {
                    throw new Exception("Invalid item type; expected 7");
                }
                obj.AddItem(new ListboxItem(ReadString(fs), ReadFont(fs), ReadColor(fs), ReadImage(fs), ReadBool(fs), ReadBool(fs)));
            }

            return(obj);
        }
示例#3
0
 public RuleSelectScreen()
 {
     BaseGame.ShowMouse = true;
     RuleLoader.Initial();
     string[] ruleLists = RuleLoader.GetRulesList();
     rulesList = new Listbox("rulelist", new Vector2(200, 150), new Point(400, 300), Color.WhiteSmoke, Color.Green);
     foreach (string rulename in ruleLists)
     {
         rulesList.AddItem(rulename);
     }
     rulesList.OnChangeSelection += new EventHandler(rulesList_OnChangeSelection);
     btn          = new TextButton("OkBtn", new Vector2(700, 500), "Begin", 0, Color.Blue);
     btn.OnClick += new EventHandler(btn_OnPress);
 }
        private void PopulateAvailableVideoModes()
        {
            _lstResolution.ClearItems();
            vmList.Clear();
            IOrderedEnumerable <VideoMode> modes = from v in SFML.Window.VideoMode.FullscreenModes
                                                   where (v.Height > 748 && v.Width > 1024) //GOSH I HOPE NOONES USING 16 BIT COLORS. OR RUNNING AT LESS THAN 59 hz
                                                   orderby v.Height * v.Width ascending
                                                   select v;

            if (!modes.Any())
            {
                throw new Exception("No available video modes");
            }

            foreach (VideoMode vm in modes)
            {
                if (!vmList.ContainsKey(GetVmString(vm)))
                {
                    vmList.Add(GetVmString(vm), vm);
                    _lstResolution.AddItem(GetVmString(vm));
                }
            }

            if (
                vmList.Any(
                    x =>
                    x.Value.Width == CluwneLib.Screen.Size.X && x.Value.Height == CluwneLib.Screen.Size.Y))

            {
                KeyValuePair <string, VideoMode> curr =
                    vmList.FirstOrDefault(
                        x =>
                        x.Value.Width == CluwneLib.Screen.Size.X &&
                        x.Value.Height == CluwneLib.Screen.Size.Y);

                _lstResolution.SelectItem(curr.Key, false);
            }
            else
            {
                //No match due to different refresh rate in windowed mode. Just pick first resolution based on size only.
                KeyValuePair <string, VideoMode> curr =
                    vmList.FirstOrDefault(
                        x =>
                        x.Value.Width == CluwneLib.Screen.Size.X &&
                        x.Value.Height == CluwneLib.Screen.Size.Y);
                _lstResolution.SelectItem(curr.Key, false);
            }
        }
示例#5
0
        private void PopulateAvailableVideoModes(Listbox resListBox)
        {
            resListBox.ClearItems();
            _videoModeList.Clear();

            var modes = VideoMode.FullscreenModes
                        .Where(v => v.Height > 748 && v.Width > 1024)
                        .OrderBy(v => v.Height * v.Width)
                        .ToList();

            if (!modes.Any())
            {
                throw new InvalidOperationException("No available video modes");
            }

            foreach (var vm in modes)
            {
                if (!_videoModeList.ContainsKey(GetVmString(vm)))
                {
                    _videoModeList.Add(GetVmString(vm), vm);
                    resListBox.AddItem(GetVmString(vm));
                }
            }

            if (_videoModeList.Any(x =>
                                   x.Value.Width == CluwneLib.Window.Viewport.Size.X &&
                                   x.Value.Height == CluwneLib.Window.Viewport.Size.Y))
            {
                var currentMode = _videoModeList.FirstOrDefault(x =>
                                                                x.Value.Width == CluwneLib.Window.Viewport.Size.X &&
                                                                x.Value.Height == CluwneLib.Window.Viewport.Size.Y);

                resListBox.SelectItem(currentMode.Key);
            }
            else
            {
                //No match due to different refresh rate in windowed mode. Just pick first resolution based on size only.
                var currentMode =
                    _videoModeList.FirstOrDefault(
                        x =>
                        x.Value.Width == CluwneLib.Window.Viewport.Size.X &&
                        x.Value.Height == CluwneLib.Window.Viewport.Size.Y);
                resListBox.SelectItem(currentMode.Key);
            }
        }
示例#6
0
        public Room()
        {
            BaseGame.ShowMouse = true;

            roomList = new Listbox("roomlist", new Vector2(30, 100), new Point(200, 350), Color.WhiteSmoke, Color.Green);

            rankList = new Listbox("ranklist", new Vector2(300, 100), new Point(450, 350), Color.WhiteSmoke, Color.Green);

            roomList.AddItem("Room 1");

            bgTexture = BaseGame.ContentMgr.Load <Texture2D>(Path.Combine(Directories.BgContent, "login"));

            bgRect = new Rectangle(0, 0, 800, 600);



            btnCreate = new TextButton("CreateBtn", new Vector2(130, 460), "Create", 0, Color.Gold);
            btnEnter  = new TextButton("EnterBtn", new Vector2(50, 460), "Enter", 0, Color.Gold);
            btnRank   = new TextButton("RankBtn", new Vector2(650, 460), "Rank List", 0, Color.Gold);

            btnCreate.OnClick += new EventHandler(btnCreate_OnPress);
            btnEnter.OnClick  += new EventHandler(btnEnter_OnPress);
            btnRank.OnClick   += new EventHandler(btnRank_OnPress);

            rankList.OnChangeSelection += new EventHandler(rankList_OnChangeSelection);
            roomList.OnChangeSelection += new EventHandler(roomList_OnChangeSelection);

            SocketMgr.OnReceivePkg += new SocketMgr.ReceivePkgEventHandler(OnReceivePack);

            /*
             *
             * stPkgHead head = new stPkgHead();
             * //head.iSytle = //包头类型还没初始化
             *
             *
             * MemoryStream Stream = new MemoryStream();
             * Stream.Write(new byte[1], 0, 1);
             * head.dataSize = 1;
             * head.iSytle = 50;
             * SocketMgr.SendCommonPackge(head, Stream);
             * Stream.Close();
             */
            // 连接到服务器
            //SocketMgr.ConnectToServer();
        }
示例#7
0
        void OnReceivePack(stPkgHead head, MemoryStream data)
        {
            if (head.iSytle == 50)
            {
                RankInfo ri;
                string   str;

                for (int i = 0; i < head.dataSize; i += 32)
                {
                    str = "";
                    data.Read(rankBuffer, 0, 32);

                    ri = (RankInfo)SocketMgr.BytesToStuct(rankBuffer, typeof(RankInfo));

                    for (int j = 0; ri.name[j] != '\0'; ++j)
                    {
                        str += ri.name[j];
                    }


                    rankList.AddItem(ri.rank + "        " + str + "              " + ri.score);
                }
            }
        }
        public OptionsMenu(IDictionary <Type, object> managers)
            : base(managers)
        {
            _background = ResourceManager.GetSprite("mainbg");
            //  _background.Smoothing = Smoothing.Smooth;

            _lblFullscreen = new Label("Fullscreen", "CALIBRI", ResourceManager);

            _chkFullscreen               = new Checkbox(ResourceManager);
            _chkFullscreen.Value         = ConfigurationManager.GetFullscreen();
            _chkFullscreen.ValueChanged += _chkfullscreen_ValueChanged;

            _lblVsync = new Label("Vsync", "CALIBRI", ResourceManager);

            _chkVsync               = new Checkbox(ResourceManager);
            _chkVsync.Value         = ConfigurationManager.GetVsync();
            _chkVsync.ValueChanged += _chkvsync_ValueChanged;

            _lstResolution = new Listbox(250, 150, ResourceManager);
            _lstResolution.ItemSelected += _reslistbox_ItemSelected;

            IOrderedEnumerable <VideoMode> modes = from v in SFML.Window.VideoMode.FullscreenModes where
                                                   (v.Height > 748 && v.Width > 1024) //GOSH I HOPE NOONES USING 16 BIT COLORS. OR RUNNING AT LESS THAN 59 hz
                                                   orderby v.Height * v.Width ascending
                                                   select v;

            if (!modes.Any())
            {
                //No compatible videomodes at all. It is likely the game is being run on a calculator. TODO handle this.
                Application.Exit();
            }

            foreach (VideoMode vm in modes)
            {
                if (!vmList.ContainsKey(GetVmString(vm)))
                {
                    vmList.Add(GetVmString(vm), vm);
                    _lstResolution.AddItem(GetVmString(vm));
                }
            }

            if (
                vmList.Any(
                    x =>
                    x.Value.Width == CluwneLib.Screen.Size.X && x.Value.Height == CluwneLib.Screen.Size.Y))

            {
                KeyValuePair <string, VideoMode> curr =
                    vmList.FirstOrDefault(
                        x =>
                        x.Value.Width == CluwneLib.Screen.Size.X &&
                        x.Value.Height == CluwneLib.Screen.Size.Y);

                _lstResolution.SelectItem(curr.Key, false);
            }
            else
            {
                //No match due to different refresh rate in windowed mode. Just pick first resolution based on size only.
                KeyValuePair <string, VideoMode> curr =
                    vmList.FirstOrDefault(
                        x =>
                        x.Value.Width == CluwneLib.Screen.Size.X &&
                        x.Value.Height == CluwneLib.Screen.Size.Y);
                _lstResolution.SelectItem(curr.Key, false);
            }

            _ticketBg = ResourceManager.GetSprite("ticketoverlay");

            _btnMainMenu            = new Label("Main Menu", "CALIBRI", ResourceManager);
            _btnMainMenu.DrawBorder = true;
            _btnMainMenu.Clicked   += _mainmenubtt_Clicked;

            _btnApply            = new Label("Apply", "CALIBRI", ResourceManager);
            _btnApply.DrawBorder = true;
            _btnApply.Clicked   += _applybtt_Clicked;


            _lstResolution.Position = new Point(45, (int)(CluwneLib.Screen.Size.Y / 2.5f));
            _lstResolution.Update(0);
            _chkFullscreen.Position = new Point(_lstResolution.Position.X,
                                                _lstResolution.Position.Y + _lstResolution.ClientArea.Height + 10);
            _chkFullscreen.Update(0);
            _chkVsync.Position = new Point(_chkFullscreen.Position.X,
                                           _chkFullscreen.Position.Y + _chkFullscreen.ClientArea.Height + 10);
            _chkVsync.Update(0);
            _lblFullscreen.Position = new Point(_chkFullscreen.Position.X + _chkFullscreen.ClientArea.Width + 3,
                                                _chkFullscreen.Position.Y + (int)(_chkFullscreen.ClientArea.Height / 2f) -
                                                (int)(_lblFullscreen.ClientArea.Height / 2f));
            _lblFullscreen.Update(0);
            _lblVsync.Position = new Point(_chkVsync.Position.X + _chkVsync.ClientArea.Width + 3,
                                           _chkVsync.Position.Y + (int)(_chkVsync.ClientArea.Height / 2f) -
                                           (int)(_chkVsync.ClientArea.Height / 2f));
            _lblVsync.Update(0);
            _btnMainMenu.Position = new Point(_lstResolution.Position.X + 650, _lstResolution.Position.Y);
            _btnMainMenu.Update(0);
            _btnApply.Position = new Point(_btnMainMenu.Position.X,
                                           _btnMainMenu.Position.Y + _btnMainMenu.ClientArea.Height + 5);
            _btnApply.Update(0);
        }
示例#9
0
文件: Hall.cs 项目: ingex0/smarttank
        void OnReceivePack(stPkgHead head, byte[] data)
        {
            if (head.iSytle == 40)
            {
                head.iSytle = 40;
            }
            if (head.iSytle == 33)
            {
                //刷房间列表成功
                string   str;
                RoomInfo room;
                byte[]   tmpData;
                roomList.Clear();

                tmpData = new byte[head.dataSize];

                for (int i = 0; i < head.dataSize; i += 36)
                {
                    str = "";
                    //data.Read(roomBuffer, 0, 32);

                    for (int k = 0; k < 36; ++k)
                    {
                        tmpData[k] = data[i + k];
                    }

                    room = (RoomInfo)SocketMgr.BytesToStuct(tmpData, typeof(RoomInfo));

                    for (int j = 0; room.name[j] != '\0'; ++j)
                    {
                        str += room.name[j];
                    }


                    roomList.AddItem(" " + str + " ( " + room.players + " / 2 )", room.id);
                }
            }
            else if (head.iSytle == 35)
            {
                //创建房间成功
                bWaitEnter = false;

                headSend          = new stPkgHead();
                Stream            = new MemoryStream();
                headSend.dataSize = 0;
                headSend.iSytle   = 33;
                SocketMgr.SendCommonPackge(headSend, Stream);
                Stream.Close();
                bInRoom = true;

                headSend          = new stPkgHead();
                Stream            = new MemoryStream();
                headSend.dataSize = 0;
                headSend.iSytle   = 34;
                SocketMgr.SendCommonPackge(headSend, Stream);
                Stream.Close();
            }
            else if (head.iSytle == 36)
            {
                //创建房间失败
                bWaitEnter = false;

                bInRoom = false;
                bIsHost = false;
            }
            else if (head.iSytle == 37)
            {
                //加入房间成功
                bWaitEnter = false;

                headSend          = new stPkgHead();
                Stream            = new MemoryStream();
                headSend.dataSize = 0;
                headSend.iSytle   = 33;
                SocketMgr.SendCommonPackge(headSend, Stream);
                Stream.Close();
                bInRoom = true;

                headSend          = new stPkgHead();
                Stream            = new MemoryStream();
                headSend.dataSize = 0;
                headSend.iSytle   = 34;
                SocketMgr.SendCommonPackge(headSend, Stream);
                Stream.Close();
            }
            else if (head.iSytle == 38)
            {
                //加入房间失败
                bWaitEnter = false;

                bInRoom = false;
                bIsHost = false;
            }
            else if (head.iSytle == 34)
            {
                //列举用户信息


                string   str;
                UserInfo player;
                byte[]   tmpData;

                Monitor.Enter(heads);
                Monitor.Enter(ranks);
                Monitor.Enter(scores);
                heads.Clear();
                ranks.Clear();
                scores.Clear();



                tmpData = new byte[head.dataSize];
                bIsHost = false;
                string[] tmpNames  = new string[6];
                int      playerNum = 0;
                for (int i = 0; i < head.dataSize; i += 56)
                {
                    str = "";
                    //data.Read(roomBuffer, 0, 32);

                    for (int k = 0; k < 56; ++k)
                    {
                        tmpData[k] = data[i + k];
                    }

                    player = (UserInfo)SocketMgr.BytesToStuct(tmpData, typeof(UserInfo));

                    for (int j = 0; player.name[j] != '\0'; ++j)
                    {
                        str += player.name[j];
                    }
                    if (str == myName && player.state == 1)
                    {
                        bIsHost = true;
                    }
                    tmpNames[playerNum] = str;//, Font font)
                    ranks.Add(player.rank);
                    scores.Add(player.score);
                    Texture2D tex;
                    if (devHeads.Contains(str))
                    {
                        tex = BaseGame.ContentMgr.Load <Texture2D>(Path.Combine(Directories.UIContent, str));
                    }
                    else
                    {
                        tex = BaseGame.ContentMgr.Load <Texture2D>(Path.Combine(Directories.UIContent, "head"));
                    }
                    if (tex == null)
                    {
                        throw new Exception("");
                    }



                    heads.Add(tex);
                    playerNum++;

                    //roomList.AddItem("room 1" + " ( " + room.players + " / 6 )", room.id);
                }
                playerCount = playerNum;

                userNames = new string[playerNum];
                for (int i = 0; i < playerNum; i++)
                {
                    userNames[i] = tmpNames[i];
                }

                Monitor.Exit(scores);
                Monitor.Exit(ranks);
                Monitor.Exit(heads);

                headSend          = new stPkgHead();
                Stream            = new MemoryStream();
                headSend.dataSize = 0;
                headSend.iSytle   = 33;
                SocketMgr.SendCommonPackge(headSend, Stream);
                Stream.Close();
            }
            else if (head.iSytle == 70)
            {
                //开始游戏
                bWaitEnter = false;
                if (bIsHost)
                {
                    GameManager.AddGameScreen(new StarwarLogic(0, userNames));
                }
                else
                {
                    for (int i = 0; i < playerCount; i++)
                    {
                        if (userNames[i] == myName)
                        {
                            GameManager.AddGameScreen(new StarwarLogic(i, userNames));
                        }
                    }
                }
            }
            else if (head.iSytle == 71)
            {
                bWaitEnter = false;
            }
        }
示例#10
0
        public OptionsMenu(IDictionary <Type, object> managers)
            : base(managers)
        {
            _background           = ResourceManager.GetSprite("mainbg");
            _background.Smoothing = Smoothing.Smooth;

            _lblfullscreen = new Label("Fullscreen", "CALIBRI", ResourceManager);

            _chkfullscreen               = new Checkbox(ResourceManager);
            _chkfullscreen.Value         = ConfigurationManager.GetFullscreen();
            _chkfullscreen.ValueChanged += _chkfullscreen_ValueChanged;

            _lblvsync = new Label("Vsync", "CALIBRI", ResourceManager);

            _chkvsync               = new Checkbox(ResourceManager);
            _chkvsync.Value         = ConfigurationManager.GetVsync();
            _chkvsync.ValueChanged += _chkvsync_ValueChanged;

            _reslistbox = new Listbox(250, 150, ResourceManager);
            _reslistbox.ItemSelected += _reslistbox_ItemSelected;

            IOrderedEnumerable <VideoMode> modes = from v in Gorgon.CurrentDriver.VideoModes
                                                   where
                                                   (v.Height > 748 && v.Width > 1024) &&
                                                   v.Format == BackBufferFormats.BufferRGB888 && v.RefreshRate >= 59
                                                   //GOSH I HOPE NOONES USING 16 BIT COLORS. OR RUNNING AT LESS THAN 59 hz
                                                   orderby v.Height * v.Width ascending
                                                   select v;

            if (!modes.Any())
            {
                //No compatible videomodes at all. It is likely the game is being run on a calculator. TODO handle this.
                Application.Exit();
            }

            foreach (VideoMode vm in modes)
            {
                if (!vmList.ContainsKey(GetVmString(vm)))
                {
                    vmList.Add(GetVmString(vm), vm);
                    _reslistbox.AddItem(GetVmString(vm));
                }
            }

            if (
                vmList.Any(
                    x =>
                    x.Value.Width == Gorgon.CurrentVideoMode.Width && x.Value.Height == Gorgon.CurrentVideoMode.Height &&
                    x.Value.RefreshRate ==
                    (Gorgon.Screen.Windowed ? Gorgon.DesktopVideoMode.RefreshRate : Gorgon.CurrentVideoMode.RefreshRate)))
            {
                KeyValuePair <string, VideoMode> curr =
                    vmList.FirstOrDefault(
                        x =>
                        x.Value.Width == Gorgon.CurrentVideoMode.Width &&
                        x.Value.Height == Gorgon.CurrentVideoMode.Height &&
                        x.Value.RefreshRate ==
                        (Gorgon.Screen.Windowed
                             ? Gorgon.DesktopVideoMode.RefreshRate
                             : Gorgon.CurrentVideoMode.RefreshRate));
                _reslistbox.SelectItem(curr.Key, false);
            }
            else
            {
                //No match due to different refresh rate in windowed mode. Just pick first resolution based on size only.
                KeyValuePair <string, VideoMode> curr =
                    vmList.FirstOrDefault(
                        x =>
                        x.Value.Width == Gorgon.CurrentVideoMode.Width &&
                        x.Value.Height == Gorgon.CurrentVideoMode.Height);
                _reslistbox.SelectItem(curr.Key, false);
            }

            _ticketbg = ResourceManager.GetSprite("ticketoverlay");

            _mainmenubtt            = new Label("Main Menu", "CALIBRI", ResourceManager);
            _mainmenubtt.DrawBorder = true;
            _mainmenubtt.Clicked   += _mainmenubtt_Clicked;

            _applybtt            = new Label("Apply", "CALIBRI", ResourceManager);
            _applybtt.DrawBorder = true;
            _applybtt.Clicked   += _applybtt_Clicked;
        }
示例#11
0
        private void TestEvents(object sender, point point)
        {
            _panel           = GetNewRootPanel();
            _panel.Suspended = true;
            _panel.BackColor = 0;

            var lst = new Listbox("lst", Fonts.Droid9, 5, 35, _panel.Width - 10, _panel.Height - 40);

            var btn = new Button("btn", "Tab me ... tap me hard", Fonts.Droid11, 5, 5);

            btn.Tap            += (o, point1) => lst.AddItem(new ListboxItem("Tap"));
            btn.TapHold        += (o, point1) => lst.AddItem(new ListboxItem("TapHold"));
            btn.DoubleTap      += (o, point1) => lst.AddItem(new ListboxItem("DoubleTap"));
            btn.TouchDown      += (o, point1) => lst.AddItem(new ListboxItem("TouchDown"));
            btn.TouchMove      += (o, point1) => lst.AddItem(new ListboxItem("TouchMove"));
            btn.TouchUp        += (o, point1) => lst.AddItem(new ListboxItem("TouchUp"));
            btn.TouchGesture   += (o, type, force) => lst.AddItem(new ListboxItem("TouchGesture"));
            btn.GotFocus       += (o) => lst.AddItem(new ListboxItem("GotFocus"));
            btn.LostFocus      += (o) => lst.AddItem(new ListboxItem("LostFocus"));
            btn.ButtonPressed  += (o, id) => lst.AddItem(new ListboxItem("ButtonPressed"));
            btn.ButtonReleased += (o, id) => lst.AddItem(new ListboxItem("ButtonReleased"));
            btn.KeyboardAltKey += (o, key, pressed) => lst.AddItem(new ListboxItem("KeyboardAltKey"));
            btn.KeyboardKey    += (o, key, pressed) => lst.AddItem(new ListboxItem("KeyboardKey"));

            _panel.AddChild(btn);

            btn = new Button("btn2", "Other button", Fonts.Droid11, 200, 5);
            _panel.AddChild(btn);

            _panel.AddChild(lst);

            _panel.Suspended = false;
        }
示例#12
0
        private void ZombieTwitForm()
        {
            var tweets = new[]{
                                    @"@zombieHunter Zombies are coming!"
                                    , @"@zombieHunter Zombies are getting closer!"
                                    , @"@zombieHunter THEY'RE HERE!!!"
                                    , @"@zombieHunter Send the Gadgets!!!"
                                    , @"@zombieHunter Tell my wife and kids..."
                                    , @"@zombieHunter ...I'll eat them later!"
                                };

            var frm = new Form("zombie twit");

            // Add panel
            var pnl = new Skewworks.Tinkr.Controls.Panel("pnl1", 0, 0, 800, 480);
            pnl.BackgroundImage = Resources.GetBitmap(Resources.BitmapResources.Zombies);
            frm.AddControl(pnl);

            // Add the app bar.
            pnl.AddControl(BuildAppBar(frm.Name));

            // Add a title.
            var title = new Label("lblTitle", "Zombie Twit", _fntHuge, frm.Width / 2 - 100, 50) { Color = Gadgeteer.Color.Yellow };
            pnl.AddControl(title);

            // Add a listbox
            var lb = new Listbox("lb1", _fntArialBold11, frm.Width / 2 - 200, frm.Height / 2 - 100, 400, 200, null);
            pnl.AddControl(lb);

            TinkrCore.ActiveContainer = frm;

            byte lastTweet = 0;
            var timer = new GT.Timer(2000);
            timer.Tick += timer1 =>
                              {
                                  if(lastTweet >= tweets.Length)
                                  {
                                      timer.Stop();
                                      return;
                                  }
                                  //lb.InsertAt(tweets[lastTweet++], 1);
                                  lb.AddItem(tweets[lastTweet++]);
                              };
            timer.Start();
        }