This has both problems I described.
Every time you press the G button you are creating a new set of fonstrings on top of the previous set of fontstring.
Because you've been lucky with the display order doesn't mean you will continue to be lucky if you change or extend the table entries:
The offsetting is to display what's happening if you press the G button multiple times
Lua Code:
local table = {
["entry"] = "one",
["entry2"] = "two",
["entry3"] = "three",
["entry4"] = "Four",
["entry5"] = "Five",
["entry6"] = "Six",
["entry7"] = "Seven",
["entry8"] = "Eight",
["entry9"] = "Nine",
["entry10"] = "Ten",
}
local f = CreateFrame("Frame", nil, UIParent, "BasicFrameTemplateWithInset")
f:SetSize(250, 400)
f:SetPoint("CENTER")
f.Title = f:CreateFontString(nil, "OVERLAY", "GameTooltipText")
f.Title:SetPoint("TOP", 0, -2)
f.Title:SetText("Original")
f.grabdata = CreateFrame("Button", nil, f, "SharedButtonTemplate")
f.grabdata:SetText("G")
f.grabdata:SetPoint("TOPLEFT", f, "TOPLEFT", 0, 0)
f.grabdata:SetSize(40, 20)
local offset = 0
f.grabdata:SetScript("OnClick",
function()
local i = 0
offset = offset + 1
for k,v in pairs(table) do
local fsname = f:CreateFontString(nil, "OVERLAY", "GameTooltipText")
fsname:SetPoint("TOPLEFT", f, "TOPLEFT", offset, -17*(i-(-2)))
fsname:SetText(k)
local fsname2 = f:CreateFontString(nil, "OVERLAY", "GameTooltipText")
fsname2:SetPoint("TOPRIGHT", f, "TOPRIGHT", -offset, -17*(i-(-2)))
fsname2:SetText(v)
i = i + 1
end
end
)
-- Constant ordered display
local table2 = {
{ display="entry", value="one" },
{ display="entry2", value="two" },
{ display="entry3", value="three" },
{ display="entry4", value="Four" },
{ display="entry5", value="Five" },
{ display="entry6", value="Six" },
{ display="entry7", value="Seven" },
{ display="entry8", value="Eight" },
{ display="entry9", value="Nine" },
{ display="entry10", value="Ten" },
}
local f2 = CreateFrame("Frame", nil, UIParent, "BasicFrameTemplateWithInset")
f2:SetSize(250, 400)
f2:SetPoint("LEFT", f, "RIGHT")
f2.Title = f2:CreateFontString(nil, "OVERLAY", "GameTooltipText")
f2.Title:SetPoint("TOP", 0, -2)
f2.Title:SetText("Constant Ordered")
f2.grabdata = CreateFrame("Button", nil, f2, "SharedButtonTemplate")
f2.grabdata:SetText("G")
f2.grabdata:SetPoint("TOPLEFT", f2, "TOPLEFT", 0, 0)
f2.grabdata:SetSize(40, 20)
local offset = 0
f2.Fonstrings = {}
f2.grabdata:SetScript("OnClick", function(self)
local parent = self:GetParent()
local left, right
offset = offset + 1
for k,v in ipairs(table2) do
if not parent.Fonstrings[i] then
left = self:CreateFontString(nil, "OVERLAY", "GameTooltipText")
right = self:CreateFontString(nil, "OVERLAY", "GameTooltipText")
if k == 1 then
left:SetPoint("TOPLEFT", self:GetParent(), 9, -22)
right:SetPoint("TOPRIGHT", self:GetParent(), -9, -22)
else
left:SetPoint("TOPLEFT", parent.Fonstrings[k-1].left, "BOTTOMLEFT", offset, -2)
right:SetPoint("TOPRIGHT", parent.Fonstrings[k-1].right, "BOTTOMRIGHT", -offset, -2)
end
tinsert(parent.Fonstrings, {left=left, right=right})
end
parent.Fonstrings[k].left:SetText(v.display)
parent.Fonstrings[k].right:SetText(v.value)
end
end)